Basé sur @ford
la 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 actuellement existants.
tar xzf images.tgz --transform='s/.*\///' -C my_dirname
find my_dirname -type d -empty -delete
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'intégralité de l'archive :
tar xzf images.tgz --transform='s/.*\///'
La sortie sera
folder1/
folder2/
folder3/
img.gif
img2.gif
img3.gif
Vous devrez alors supprimer les répertoires avec une autre commande, malheureusement.
Vérifiez la version tar, par exemple
$ 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
Vous pouvez utiliser les --strip-components option de goudron.
--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