从目录递归查找最大文件大小

Ume*_*cha 2 unix bash shell

嗨,我有一个目录,其中包含数千个.gz文件.现在我想找到最大的未压缩文件大小而不解压缩它.例如,dir1有1.gz,2.gz,3.gz等等,我想找到最大的未压缩文件大小而不解压缩它

我尝试了以下命令,但它无法正常工作

find . -type f -name '*.gz' | xargs zcat | xargs ls -1s
Run Code Online (Sandbox Code Playgroud)

请指导.我是bash和linux的新手.提前致谢.

Oli*_*lac 5

有趣的是,根据 http://www.gzip.org/zlib/rfc-gzip.html

ISIZE (Input SIZE)
   This contains the size of the original (uncompressed) input data modulo 2^32. 
Run Code Online (Sandbox Code Playgroud)

因此格式包含原始大小(模2 ^ 32,"对任何人都应该足够",但当然不是......请看下面的警告!)...现在我们只需要一个命令输出它给我们:: gzip -l file(s)大小是第二个参数.

因此,如果您的原始文件大小都小于4gb,则根本不需要解压缩文件:

find . -name '*.gz' -print | xargs gzip -l | awk '{ print $2, $4 ;}'  | grep -v '(totals)$' | sort -n | tail -1
Run Code Online (Sandbox Code Playgroud)

这将比我在这里看到的其他解决方案更快^^

但是请注意:对于大小大于2 ^ 32的文件,结果将只是"模2 ^ 32"(例如,大小为"2 ^ 32 + 1"字节的文件将被报告为具有大小1个字节!).因此,如果你有原始大于4Gb的压缩文件,你需要解压缩(如果你想要的话)以获得它们的实际大小!

编辑:我试图看看是否可以使用该比率而不是"原始大小模2 ^ 32":没有...

$ dd if=/dev/zero of=1_gb bs=1048576  count=1024    #creating a 1 Gb file
$ dd if=/dev/zero of=5_gb bs=1048576  count=5120    #creating a 5 Gb file
$ ls -al *gb*
-rw-r--r--    1 user  UsersGrp   1042074 Mar  4 10:30 1_gb.gz
-rw-r--r--    1 user  UsersGrp   5210215 Mar  4 10:28 5_gb.gz
$ gzip -l *gb*
compressed        uncompressed  ratio uncompressed_name
   1042074          1073741824  99.9% 1_gb
   5210215          1073741824  99.5% 5_gb   
   6252289          2147483648  99.7% (totals)

 (notice the 2nd: the uncompressed is not 5gb, but 1gb, as it's modulo 2^32 (=4gb) :( )
Run Code Online (Sandbox Code Playgroud)

=>对于> 4gb的文件,该比率也是不可用的...(5gb/5210215 = 1030.1gb/1042074 = 1030.所以比率应该相同.但似乎比率是使用"未压缩"字段,并且不是原始尺寸本身.)