2009-09-20 4 views
0

Je recherche une commande qui compressera chaque dossier dans un répertoire séparément avec le nom de chaque archive reflétant le nom du dossier d'origine. Je sais queCommande pour compresser tous les fichiers/dossiers sous un répertoire

goudron czvf example.tar.gz exemple/

compresse un dossier entier. Cependant, je n'ai pas trouvé de commande pour l'archivage en masse. Y a-t-il une telle commande?

+1

Oui, je vois trouver, xargs et sed dans votre avenir. –

+0

oui, vous l'avez sed;) – undoIT

Répondre

1
find -mindepth 1 -maxdepth 1 -type d -exec tar czf {}.tar.gz {} \; 

Notez que je -maxdepth 1.

Tenir compte de la structure de répertoire:

. 
|-- a 
| `-- x 
|-- b 
`-- c 

Sans -maxdepth 1 vous obtiendrez a.tar.gz et a/x.tar.gz. a.tar.gz contiendrait x et tous les fichiers à l'intérieur; et a/x.tar.gz contiendrait x et ses fichiers. Mais cela stocke les éléments dans x deux fois, en supposant que ce n'est pas le but.

Mise à jour utiliser -mindepth 1 aussi bien, car lorsqu'il est exécuté en dehors de example/ un example.tar.gz serait créé aussi.

Mise à jour ... et pour bzip2:

find -mindepth 1 -maxdepth 1 -type d -exec tar cjf {}.tar.bz2 {} \; 
+0

Sans -mindepth 1, ne va-t-il pas créer une archive pour le répertoire en cours? –

+0

Je pensais cela aussi, mais quand je l'ai testé, je ne l'ai pas vu se produire. – opello

+0

Ah, mais si vous l'exécutez dans "example /" ce n'est pas le cas, sinon. Mettra à jour. – opello

1
for f in `find -mindepth 1 -maxdepth 1 -type d`; do 
    tar -czf $f.tar.gz $f 
done 
+0

Merci! Exactement ce que je cherchais. – undoIT

+0

D'accord, encore une question. Si je veux compresser en bzip2, quelle serait la commande complète? – undoIT

0

Ok, voici la dernière commande, je suis venu avec pour archiver ensuite compresser avec bzip2 pour une compression maximale

find -mindepth 1 -maxdepth 1 -type d -exec tar cjf '{}'. Tar.bz2 '{}' \;

merci à tous!

Questions connexes