J'ai besoin de compresser tous les fichiers dans un répertoire séparément, y compris tous les fichiers dans les sous-répertoires sans supprimer les originaux par la suite. Disons que j'ai index.html, je veux avoir à la fin index.html.gzip ET index.html.
Je suis capable de compresser tous les fichiers dans mon répertoire via
gzip -r .
Mais je veux aussi garder les fichiers originaux.
Est-ce possible?
*.*
enls
?*.*
correspond à tous les fichiers nommés régulièrement, et généralement aucun répertoire. Bien sûr, cela ne fonctionne que dans la plupart des cas et généralement pas si vous en avez besoin. Utilisez ensuite lafind
commande.ls *.*
ne choisira pas de fichiers comme TODO .ls
n'est pas nécessaire du tout :for x in *
. Cependant, l'utilisationfind
devrait l'êtrefind . -type f | while read -r x
.-r
allumageread
.Vous pouvez facilement le changer pour inclure ce que vous voulez compresser (
-name '*.txt -or -name '*.html
etc.) au lieu de comme maintenant, en excluant certains fichiers (déjà compressés, fichiers de sauvegarde et temporaires).Gère également très bien les espaces dans le nom de fichier.
Remplacez
gzip
parecho gzip
pour tester. Ou ignorez la partie -exec tous ensemble.Edit: Oh, j'ai oublié de mentionner que cela ne vérifie pas s'il
<target>.gz
existe déjà. Cela peut ou non être un problème.Edit2: Ok, nous allons ici avec quelque chose qui vérifie le fichier existant. Si cela peut être voulu. Excusez-moi d'être en ligne.
Mon
find
-foo n'est peut-être pas ce qu'il pourrait être, il peut très bien être possible de sauter directement dans find.la source
Ajoutez simplement l'option -c, je pense que cela devrait fonctionner
la source
gzip 1.6 (juin 2013) a ajouté l'
-k, --keep
option, maintenant vous pouvez:Trouvé sur: /unix/46786/how-to-tell-gzip-to-keep-original-file
la source
Testé sur Debian (gzip 1.3.12-6)
la source
ls
est inutile, utilisez*
.