varios descomprimir crear consola comprimir comando archivos archivo php unix tar

php - descomprimir - ¿Cómo extraigo archivos sin estructura de carpetas usando tar



descomprimir zip linux terminal (5)

Tengo un archivo tar.gz con la siguiente estructura:

folder1/img.gif folder2/img2.gif folder3/img3.gif

Quiero extraer los archivos de imagen sin la jerarquía de carpetas para que el resultado extraído se vea así:

/img.gif /img2.gif /img3.gif

Necesito hacer esto con una combinación de Unix y PHP. Aquí está lo que tengo hasta ahora, funciona para extraerlos al directorio especificado pero mantiene la jerarquía de carpetas:

exec(''gtar --keep-newer-files -xzf images.tgz -C /home/user/public_html/images/'',$ret);


Basado en la respuesta de @ford . Éste lo extraerá a la carpeta my_dirname. Para que podamos borrar correctamente las carpetas vacías sin afectar los archivos existentes actualmente.

tar xzf images.tgz --transform=''s/.*////'' -C my_dirname find my_dirname -type d -empty -delete


Compruebe la versión tar, por ejemplo

$ tar --version

Si la versión es > = que tar-1.14.90 use --strip-components

tar xvzf web.dirs.tar.gz -C /srv/www --strip-components 2

de lo contrario usa --strip-path

tar xvzf web.dirs.tar.gz -C /srv/www --strip-path 2


Encuentre img * .gif en cualquier subcarpeta de mytar.tar.gz y extraiga a ./

tar -zxf mytar.tar.gz --absolute-names --no-anchored img * .gif --transform = ''s:. * / ::''

Encuentre img * .gif en cualquiera de las 3 carpetas enumeradas en esta pregunta específica en mytar.tar.gz y extraiga a ./

tar -zxf mytar.tar.gz --absolute-names --no-anchored img * .gif --transform = ''s: ^ folder [1-3] / ::''


Esto es casi posible solo con tar, utilizando el indicador --transform, excepto que no hay forma de eliminar los directorios que queden por lo que puedo decir.

Esto aplanará todo el archivo:

tar xzf images.tgz --transform=''s/.*////''

La salida será

folder1/ folder2/ folder3/ img.gif img2.gif img3.gif

Luego deberá eliminar los directorios con otro comando, desafortunadamente.


Puedes usar la opción --strip-components de tar.

--strip-components count (x mode only) Remove the specified number of leading path ele- ments. Pathnames with fewer elements will be silently skipped. Note that the pathname is edited after checking inclusion/exclu- sion patterns but before security checks.

Creo un archivo tar con una estructura similar a la tuya:

$tar -tf tarfolder.tar tarfolder/ tarfolder/file.a tarfolder/file.b $ls -la file.* ls: file.*: No such file or directory

Luego se extrae haciendo:

$tar -xf tarfolder.tar --strip-components 1 $ls -la file.* -rw-r--r-- 1 ericgorr wheel 0 Jan 12 12:33 file.a -rw-r--r-- 1 ericgorr wheel 0 Jan 12 12:33 file.b