J'ai un fichier tar.gz avec la structure suivante:
folder1/img.gif
folder2/img2.gif
folder3/img3.gif
Je veux extraire les fichiers image sans la hiérarchie des dossiers pour que le résultat extrait ressemble à:
/img.gif
/img2.gif
/img3.gif
Je dois le faire avec une combinaison d'Unix et de PHP. Voici ce que j'ai jusqu'à présent, cela fonctionne pour les extraire dans le répertoire spécifié mais conserve la hiérarchie des dossiers:
exec('gtar --keep-newer-files -xzf images.tgz -C /home/user/public_html/images/',$ret);
Vous pouvez utiliser l'option - - 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.
Je crée un fichier tar avec une structure similaire à la vôtre:
$tar -tf tarfolder.tar
tarfolder/
tarfolder/file.a
tarfolder/file.b
$ls -la file.*
ls: file.*: No such file or directory
Puis extrait en faisant:
$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
C'est presque possible avec tar seul, en utilisant l'indicateur --transform, sauf qu'il n'y a aucun moyen de supprimer les répertoires restants pour autant que je sache.
Cela aplatira l'archive entière:
tar xzf images.tgz --transform='s/.*\///'
La sortie sera
folder1/
folder2/
folder3/
img.gif
img2.gif
img3.gif
Vous devrez ensuite supprimer les répertoires avec une autre commande, malheureusement.
Vérifiez la version tar par ex.
$ tar --version
Si la version est > = que tar-1.14.90 utilisez --strip-components
tar xvzf web.dirs.tar.gz -C /srv/www --strip-components 2
sinon utilisez --strip-path
tar xvzf web.dirs.tar.gz -C /srv/www --strip-path 2
Basé sur @ford
réponse. Celui-ci va l'extraire dans le dossier my_dirname. Afin que nous puissions effacer correctement les dossiers vides sans affecter les fichiers existants.
tar xzf images.tgz --transform='s/.*\///' -C my_dirname
find my_dirname -type d -empty -delete
Recherchez img * .gif dans n'importe quel sous-dossier de mytar.tar.gz et extrayez-le dans ./
tar -zxf mytar.tar.gz --absolute-names --no-anchored img * .gif --transform = 's:. */::'
Recherchez img * .gif dans l'un des 3 dossiers répertoriés dans cette question spécifique dans mytar.tar.gz et extrayez-le dans ./
tar -zxf mytar.tar.gz --absolute-names --no-anchored img * .gif --transform = 's: ^ folder [1-3]/::'