2010-11-17 339 views
0

我想写一个脚本,需要一个文件名作为参数,然后压缩和解压缩每个程序的文件,compress, gzip, bzip2zip 。在每个阶段,它会记录压缩前后文件的大小。最后,它显示一个列表,显示压缩程序,未压缩大小,压缩大小和压缩比率(最多1位小数)。我希望通过压缩来实现列表的排序,最高效的压缩数据将显示在顶部。任何意见或帮助将不胜感激。非常感谢。压缩和解压缩与每个“压缩,gzip,bzip2和zip”文件

+1

为什么?这必须是功课,对吧? – 2010-11-17 04:44:42

+1

你卡在哪里?你有什么更具体的问题吗? – 2010-11-17 04:45:55

+2

将它分解成更小的步骤,您可以在shell提示符下执行以下操作:查找文件大小,压缩文件,查找其压缩大小,计算比率,然后将其放入脚本中。在压缩gzip bzip2 zip中使用'for COMPRESSION;做...;完成“来处理压缩程序,然后在相应的输出列上放置一个管道进行排序。回到你不能做的那些问题的具体问题。 – 2010-11-17 07:12:32

回答

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

我认为'orig_size'不应该指向'$ {file} .gz',而只能指向'$ {file}'。 – Danosaure 2010-11-17 13:08:26

+0

@Danosaure:非常感谢!固定。 – 2010-11-17 13:38:31

+2

以获得gz​​ip的大小,我只是写'gzip_size = $(gzip -c“$ file”| wc -c)'而不是实际将“$ file.gz”写入磁盘。 – 2010-11-17 14:55:03