2010-11-17 11 views
0

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"

+1

Pourquoi? Cela doit être devoirs, non? –

+1

Où êtes-vous coincé? Avez-vous des questions plus spécifiques? –

+2

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. –

Répondre

3
#!/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 
+2

Je pense que 'orig_size' ne devrait pas pointer vers' $ {file} .gz' mais seulement vers '$ {file}'. – Danosaure

+0

@Danosaure: Merci, bien repéré! Fixé. –

+2

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. –