如何在查找结果中显示“人类可读”的文件大小?


11

我正在尝试在Centos服务器上找到所有大文件。为此,我正在使用:

find / -maxdepth 10 -size +100000 -ls

我尝试更改-ls为,-lsh但不允许这样做。

如何以人类可读的大小显示这些结果(使用后缀k,M等)?


您对人类可读的定义是什么?对我来说,这足以让人理解。
manatwork 2014年

您应该尝试file使用find
Ramesh 2014年

@manatwork kb,mb,gb
blarg 2014年

Answers:


10

find没有像这样的复杂选项ls。如果需要ls -h,您需要致电ls

find / -maxdepth 10 -size +100000 -exec ls -lh {} +

我建议使用该-xdev选项以避免递归到其他文件系统,如果您担心磁盘空间,该选项将无用。

find / -xdev -maxdepth 10 -size +100000 -exec ls -lh {} +

如果将zsh用作shell,则find可以使用glob限定符代替使用。限制文件大小很简单:L后跟一个大小;尺寸可以在数字前有一个可选单位。如果您不关心最大深度,则可以使用**/递归到子目录中。如果您关心最大深度,则它会比较麻烦,因为zsh全局模式缺乏表达“最多n次出现”的方法。为了避免跨设备递归,请使用d全局限定符;您需要找到设备编号,您可以stat在Linux下使用该命令显示该设备编号(stat -c %d /仅显示该编号),也可以使用zsh自己的stat内置显示(运行zmodload zsh/stat以加载它)。

ls -lh /**/*(L+M99d$(stat -c %d /))

4

您正在尝试的命令对我来说是可读的。但是,可以通过以下查找使用文件实用程序。

find / -maxdepth 10 -size +100000 -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print

另一种方法是使用以下命令。

du -BM / | sort -nr

上面的命令将为您提供按文件大小排序的文件。

如果使用coreutils> 7.5,则可以发出以下命令以按大小列出文件。

du -ah / | grep -v "/$" | sort -h

在我的机器上,我没有sort -h可用的选项。

正如您在评论中提到的那样,您可读的格式是文件的大小应为kbmbgb。我将使用我发布的第二条命令作为答案。我在系统中使用它时得到的输出是

du -BM /home/ramesh/chk1/ | sort -nr

50M     /home/ramesh/chk1/
21M     /home/ramesh/chk1/Hierarchical_Clustering_Working
3M      /home/ramesh/chk1/checking_files
1M      /home/ramesh/chk1/checking/checking2
1M      /home/ramesh/chk1/checking/checking1
1M      /home/ramesh/chk1/checking/asdf
1M      /home/ramesh/chk1/checking

有没有办法设置第二个命令的下限?最大的文件出现在外壳的顶部,然后迅速消失在外壳顶部。编辑-我看到您只需要删除r
blarg 2014年

您可以通过添加> output到命令来将输出重定向到文件。然后,您可以打开文件并根据需要查看输出:)
Ramesh 2014年

我也看到它也显示文件夹,而我只在文件之后
blarg 2014年

du -a --max-depth=10 / | sort -rn是我能想到的结果。但是,在这种情况下,它不会以KB,MB或GB的大小显示。
Ramesh 2014年

1

我认为您追求的是以下内容。

find / -maxdepth 10 -size +100000 -exec ls -lah {} + 

-exec允许你执行一个命令和{}置换为查找的结果。最后,+is告诉发现它是命令的结尾并且是必需的。


2
实际上,完全没有必要在{}此处引用。该命令中的单引号用于shell,但是shell根本不会看到该ls -lah <args...>命令-它会看到{},不需要将其用引号引起来。是find看到,ls -lah {}并且是find扩展{},并且如-exec选项名称所暗示的那样,直接对参数find使用exec*系统调用,因此不会出现空格问题,因为find不会进行单词拆分在您的文件名上。
jw013 2014年

1
-a选项ls因为参数预计将文件和目录不是不必要的。GNU find可以使用ls -dils-ls选项,因此要最接近地复制它ls -dilsh
jw013 2014年

man find为使用-exec的第一个示例提供以下内容: 在当前目录中或当前目录下的每个文件上find . -type f -exec file '{}' \; 运行文件。请注意,括号用单引号引起来,以防止其解释为shell脚本标点符号。分号也同样受反斜杠的保护,尽管在这种情况下也可以使用单引号。
Tim Hughes

1
手册页只是在提倡一些不必要的警告。不会造成伤害,但是我不知道需要{}引用任何外壳。
jw013 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.