gpt4 book ai didi

linux - 命令打印大文件,排序,大小为人类可读格式

转载 作者:IT王子 更新时间:2023-10-29 00:48:01 29 4
gpt4 key购买 nike

我编写了一个简单的 shell 脚本来查找大文件,主要是为了节省我自己的输入时间。这项工作正在完成:

find $dir -type f -size +"$size"M -printf '%s %p\n' | sort -rn

我想将字节输出转换为人类可读的格式。我在网上找到了如何手动执行此操作的方法,例如,

find $dir -type f -size +"$size"M -printf '%s %p\n' | sort -rn |
awk '{ hum[1024**4]="TB"; hum[1024**3]="GB"; hum[1024**2]="MB"; hum[1024]="KB"; hum[0]="B";
for (x=1024**4; x>=1024; x/=1024){
if ($1>=x) { printf "%7.2f %s\t%s\n",$1/x,hum[x],$2;break }
}}'

但这看起来很乱。我想知道:是否有一种标准方法可以将字节转换为人类可读的形式

当然,也欢迎使用任何生成以下输出的替代方法,给定目录和最小大小作为输入:

   1.25 GB      /foo/barf
598.80 MB /foo/bar/bazf
500.58 MB /bar/bazf
421.70 MB /bar/baz/bamf
...

注意:这必须在 2.4 和 2.6 上都有效,并且输出应该排序。

最佳答案

使用du -hsort -h

find /your/dir -type f -size +5M -exec du -h '{}' + | sort -hr

解释:

  • du -h file1 file2 ...human 可读格式打印 disk usage给定的文件。
  • sort -hrr相反的顺序对 human 可读数字进行排序(首先是较大的数字)。
  • find -exec 的选项+ 将减少命令du 的调用次数,从而加快执行速度。这里的+可以替换成';'

如果您希望在最后打印较大的文件,您可以删除 sort 命令的选项 -r。您甚至可以使用更简单的以下命令,但您的终端窗口缓冲区可能已满!

find /your/dir -type f -exec du -h '{}' + | sort -h

或者如果您只想要前十个较大的文件:

find /your/dir -type f -exec du -h '{}' + | sort -hr | head

注意 sort 的选项 -h 大约在 2009 年引入,因此这个选项在旧发行版上可能不可用(因为红帽 5).此外,find -exec 的选项 + 在旧发行版(如 Red Hat 4)上也不可用。


在旧发行版上,您可以使用 xargs 代替 find -exec 的选项 +。命令 ls 也可用于打印排序的文件。但要保证按大小排序xargs 必须仅调用一次ls。如果您的文件数量可以接受,xargs 只能调用一次 ls:这取决于传递给 ls 参数的文本长度(所有文件名的总和长度)。

find /your/dir -type f -size +5M -print0 | xargs -0 ls -1Ssh

(从 MichaelKrelin-hacker 中借鉴了一点灵感)。

解释:

  • ls -1 每行显示一个文件
  • ls -S 按文件大小排序
  • ls -s 打印文件大小
  • ls -h 以人类可读的格式打印尺寸

最快的命令可能是使用上面的 ls -1Sshfind -exec+ 选项,但与上面的文件数量一样必须可接受仅调用一次 ls 以保证按大小排序(find -exec 的选项 + > 与 xargs 的工作方式大致相同。

find /your/dir -type f -size +5M -exec ls -1Ssh '{}' +

要减少找到的文件数量,您可以增加阈值大小:例如将 +5M 替换为 +100M

关于linux - 命令打印大文件,排序,大小为人类可读格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8943154/

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