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

bla*_*arg 17 ls shell find

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

find / -maxdepth 10 -size +100000 -ls
Run Code Online (Sandbox Code Playgroud)

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

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

Gil*_*il' 13

find没有像ls. 如果你想ls -h,你需要打电话ls

find / -maxdepth 10 -size +100000 -exec ls -lh {} +
Run Code Online (Sandbox Code Playgroud)

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

find / -xdev -maxdepth 10 -size +100000 -exec ls -lh {} +
Run Code Online (Sandbox Code Playgroud)

如果您使用 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 /))
Run Code Online (Sandbox Code Playgroud)


Ram*_*esh 5

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

find / -maxdepth 10 -size +100000 -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print
Run Code Online (Sandbox Code Playgroud)

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

du -BM / | sort -nr
Run Code Online (Sandbox Code Playgroud)

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

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

du -ah / | grep -v "/$" | sort -h
Run Code Online (Sandbox Code Playgroud)

在我的机器中,我没有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
Run Code Online (Sandbox Code Playgroud)