我正在尝试查找 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发生”。为了避免跨设备递归,请使用d
glob 限定符;您需要找到设备编号,您可以使用stat
Linux 下的命令显示该设备编号(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=1
du
请注意, macOS 系统上du -b
可能不存在该选项。du