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

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

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

find / -maxdepth 10 -size +100000 -ls

我尝试更改-ls-lsh但这是不允许的。

如何以人类可读的尺寸显示这些结果(使用后缀 k、M、...)?

答案1

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 glob 模式缺乏表达“最多n发生”。为了避免跨设备递归,请使用dglob 限定符;您需要找到设备编号,您可以使用statLinux 下的命令显示该设备编号(stat -c %d /仅显示编号)或使用 zsh 自己的stat内置命令(运行zmodload zsh/stat以加载它)。

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

答案2

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

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可用的选项。

正如您在评论中提到的,您的人类可读格式是文件的大小应为知识库,MB或者国标。我会使用我发布的第二个命令作为答案。当我在系统中使用它时得到的输出是,

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

答案3

我认为你所追求的更像是以下内容。

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

允许-exec您执行命令并{}用查找结果替换。最后是+告诉 find 这是命令的结尾并且是必需的。

答案4

du -bah我更喜欢over的更清晰的输出ls -hl(希望我可以使用它du -hab来提高记忆力,但顺序会有所不同):

find / -maxdepth 10 -size +100000 -exec du -bah {} + 2> /dev/null

du's-b或选项是必需的,因为--bytes通常显示磁盘块大小而不是确切的文件大小。--apparent-size --block-size=1du

请注意, macOS 系统上du -b可能不存在该选项。du

相关内容