gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:36:39 25 4
gpt4 key购买 nike

您好,我有一个包含数千个 .gz 文件的目录。现在我想在不解压缩的情况下找到最大的未压缩文件大小。例如,dir1 有 1.gz、2.gz、3.gz 等等,我想在不解压缩的情况下找到最大的未压缩文件大小

我尝试了以下命令,但它不起作用

find . -type f -name '*.gz' | xargs zcat | xargs ls -1s

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

最佳答案

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

ISIZE (Input SIZE)
This contains the size of the original (uncompressed) input data modulo 2^32.

因此格式包含原始大小(模 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

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

但是请注意:对于大小大于 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) :( )

=> 该比率对于 >4gb 的文件也无法使用...( 5gb/5210215 = 1030 . 1gb/1042074 = 1030 也是。所以比率应该是相同的。但似乎比率正在使用“未压缩”字段,而不是原始大小本身。)

关于bash - 从目录递归查找最大文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22165228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com