J'essaie d'écrire un script qui prend un nom de fichier comme argument, puis compresse et décompresse le fichier avec chacun des programmes, compress, gzip, bzip2
et zip
. À chaque étape, il note la taille du fichier avant et après la compression. Enfin, il affiche une liste montrant le programme de compression, la taille non compressée, la taille compressée et le taux de compression (jusqu'à 1 décimale). Je veux que la liste soit ordonnée par la compression obtenue, avec des chiffres pour la compression la plus efficace en haut. Tous les commentaires ou aides seraient grandement appréciés. Merci beaucoup.compresse et décompresse le fichier avec chacun des "compress, gzip, bzip2 et zip"
Répondre
#!/bin/bash
file="$1"
# Original file size
orig_size=$(stat -c'%s' $file)
# Get sizes
gzip_size=$(gzip -c "$file" | wc -c)
# Repeat for other compression types...
# Get ratios
gzip_ratio=$(echo "scale=1; 100 * ($orig_size - $gzip_size)/$orig_size" | bc)
# Repeat for others...
# Unsorted output
echo "gzip $orig_size $gzip_size $gzip_ratio" >> unsorted.txt
# Repeat for others...
# Create sorted list
sort -n -r +3 -4 unsorted.txt > sorted.txt
cat sorted.txt # Print sorted list
Je pense que 'orig_size' ne devrait pas pointer vers' $ {file} .gz' mais seulement vers '$ {file}'. – Danosaure
@Danosaure: Merci, bien repéré! Fixé. –
Pour obtenir la taille gzippée, j'écrirais simplement 'gzip_size = $ (gzip -c" $ fichier "| wc -c)' au lieu d'écrire le "$ fichier.gz" sur le disque. –
Pourquoi? Cela doit être devoirs, non? –
Où êtes-vous coincé? Avez-vous des questions plus spécifiques? –
Décomposer en étapes plus petites, vous pouvez le faire vous-même à l'invite du shell: trouver la taille du fichier, compresser le fichier, trouver sa taille compressée, calculer le ratio, puis mettre dans un script. Utilisez un 'pour COMPRESSION dans compress gzip bzip2 zip; faire ...; done 'de travailler à travers les programmes de compression, puis mettre un tuyau pour trier -n sur la colonne de sortie appropriée. Revenez avec des problèmes spécifiques pour les bits que vous ne pouvez pas faire. –