Je suis capable de compresser tous les fichiers d'un répertoire (mydirectory
) à l'aide de la commande:
gzip --suffix .gz --recursive mydirectory
Mais...
Je ne veux pas que les images (.ico, .jpg, .png, .gif) et les fichiers PDF (.pdf) du répertoire soient gzippés.
Et les fichiers gzippés ont l'extension .gz
. Je ne veux pas ça. Par exemple, je voudrais que le fichier gzippé index.html
soit index.html
lui-même, et NON index.html.gz
.
Alors, comment puis-je faire cela, de manière optimale/efficace?
Voici comment je le fais maintenant (un processus assez long).
Compressez tous les fichiers dans mydirectory
mais ne supprimez/remplacez pas les fichiers originaux:
cd ~/mydirectory
find . -type f | \
while read -r x
do
gzip -c -9 "$x" > "$x.gz"
done
Supprimez toutes les images gzippées et les fichiers PDF:
find . -type f -iname "*.ico.gz" -exec rm -f {} \;
find . -type f -iname "*.jpg.gz" -exec rm -f {} \;
find . -type f -iname "*.png.gz" -exec rm -f {} \;
find . -type f -iname "*.gif.gz" -exec rm -f {} \;
find . -type f -iname "*.pdf.gz" -exec rm -f {} \;
Renommez les fichiers gzip existants, en supprimant essentiellement l'extension .gz
de leur nom:
cd
for f in `find mydirectory -iname '*.gz'`; do
mv $f ${f%.gz}
done
Ce que nous avons à peu près maintenant, ce sont des fichiers texte gzippés (.html, .xml, .css, .js) sans extension .gz, ainsi que des images et des PDF décompressés/non compressés.
Étape 1: faites une sauvegarde. Ensuite, utilisez find
pour filtrer vos fichiers et exécutez gzip, puis déplacez le fichier vers le nom de fichier d'origine:
find -type f -not \( -iname '*.ico' -or -iname '*.jpg' -or -iname '*.png' -or -iname '*.gif' \) -exec gzip "{}" \; -exec mv "{}.gz" "{}" \;
Ceci est une commande destructive alors soyez prudent. Supprimez les commandes -exec...
pour commencer afin de vous assurer que vous ne sélectionnez que les fichiers que vous souhaitez compresser.