J'essaie de créer une archive tar compressée qui contient tous les fichiers PDF qui existent dans l'un de mes répertoires. La structure du répertoire doit être conservée. Les répertoires vides ne sont pas nécessaires, mais je m'en fiche vraiment qu'ils soient là.
Par exemple, disons que j'avais un répertoire qui ressemblait à ceci:
dir
dir/subdir1
dir/subdir1/subsubdir1/song.mp3
dir/subdir2
dir/subdir2/subsubdir1
dir/subdir2/subsubdir1/document.pdf
dir/subdir2/subsubdir1/another-song.mp3
dir/subdir2/subsubdir1/top-ten-movies.txt
dir/subdir3
dir/subdir3/another-document.pdf
Après avoir exécuté la commande, j'aimerais avoir dir.tar.gz
ceci:
dir
dir/subdir2
dir/subdir2/subsubdir1
dir/subdir2/subsubdir1/document.pdf
dir/subdir3
dir/subdir3/another-document.pdf
Possible?
find docs \( -iname '*.pdf' -o -iname '*.mp3' \) -printf '"%p"\n' | xargs tar czf docs-media.tar.gz
\'"
(faute de xargs), et ne fonctionnera pas s'il y a trop de noms de fichiers (faute du noyau).-printf '"%p"\n'
partie s'en occupe (du moins c'est ce que j'ai fait pour moi).Avec bash ≥4 ou zsh et GNU tar:
Cela peut ne pas fonctionner si vous disposez d'un très grand nombre de fichiers PDF et que la ligne de commande est trop longue. Ensuite, vous auriez besoin d'une solution basée sur la recherche plus complexe (à nouveau, en utilisant GNU tar):
Alternativement (et de manière portable), vous pouvez créer l'archive avec pax .
Le premier
-s
dit d'inclure tous les.pdf
fichiers, sans changer leur nom. Le second-s
dit de renommer tous les autres fichiers avec un nom vide, ce qui signifie en fait de ne pas les inclure dans l'archive.la source
**
; Je ne savais même pas que bash 4 avait ça maintenant