Comment puis-je bzip2 récursivement tous les fichiers qui ne se terminent pas par le symbole .bz2
sous Linux ?
Réponses
Trop de publicités?De mémoire (désolé, je n'ai pas de Shell à portée de main pour tester les citations, etc :)
for _t in `find . -print |grep -v -E "\.bz$"`; do bzip2 -9 $_t && echo OK $_t || echo FAIL $_t; done
Elle utilise find pour trouver tous les fichiers, grep pour éliminer ceux qui ont une extension .bz2, puis les envoie un par un dans bzip2. Je pense qu'une partie de la citation est fausse, cependant - je testerais d'abord séparément la partie entre guillemets.
Bonne chance ! Vous pourriez vouloir utiliser xz à la place - il compresse généralement mieux - ou même tout goudronner et bzip2 ou xz à la place.
Avec zsh ( setopt extended_glob
doit être activé) :
bzip2 **/^*.bz2(.)
**
récure dans les sous-répertoires ; ^*.bz2
correspond à tout sauf *.bz2
; (.)
restreint aux fichiers réguliers.
Avec bash 4, si vous êtes d'accord pour ignorer bzip2
se plaint d'être invoqué sur des répertoires :
bzip2 **/!(*.bz2)
Voici un commentaire. Si nécessaire, installez ifne
premier. Sur Ubuntu :
sudo apt-get install moreutils
Et puis :
find YOUR_DIR -type f -not -name \*.bz2 -print0 | ifne xargs -0 bzip2
Cela fait la même chose que les autres réponses, mais vous n'obtiendrez pas de messages d'avertissement sur le bzip2ing des répertoires, et s'il n'y a rien à bzip2
plus, vous ne recevrez plus de messages d'avertissement concernant l'envoi de données compressées par bzip2 dans un terminal. Il utilise également xargs
usw.
YOUR_DIR peut contenir des jokers ou des répertoires multiples, par exemple YOUR*DIR ou autre.