查找大小大于 x kB/MB/GB 的文件,并显示其大小

查找大小大于 x kB/MB/GB 的文件,并显示其大小

我想要一个简单的命令(可能使用find)来查找所有文件 > 某种大小(以字节、千字节、兆字节或千兆字节为单位),并在找到它们时打印它们的大小。

例如,此命令查找所有大于 10 MB 的文件,但遗憾的是不显示其大小:

find . -size +10M

也可以看看:

  1. 大于 1 GB 且超过 6 个月的文件- 不显示尺寸
  2. Linux 显示目录中大于 1 GB 的文件并显示大小- 接受的答案看起来比预期更复杂,我不需要排序。
  3. 查找大于X值的文件,按大小排序,以ls格式显示- 我不需要也不想要ls格式,主要答案可能不适用于空格
  4. https://linuxconfig.org/how-to-use-find-command-to-search-for-files-based-on-file-size

答案1

怎么样:

find -size +10M -exec du -h {} \;

答案2

请注意, Minfind . -size +10M是 GNU 扩展。 GNU 实现find有另一个扩展:-printf您可以使用它来打印这些文件的大小:

find . -size +10M -printf '%s %p\n'

报告大小超过 10MiB(兆字节,而不是兆字节)的文件的s大小和ath。p

在这里,您还可以使用zshand 其stat内置限定符和 glob 限定符:

zmodload zsh/stat
stat -nL +size -- **/*(LM+10)

这将打印文件路径后的大小。另请注意,与 相反find,默认情况下排除隐藏文件(您可以使用D限定符将它们添加回来)。

或者在olumnsprint r上写 aw (十字):2 Ca

stat -nLA report +size -- **/*(LM+10)
print -raC2 -- $report

请注意,所有这些-size, %s,+size都考虑文件的尺寸,这与文件的不同磁盘使用情况² 如du(或%b/ %kingfind -printf+blockinzsh的 stat 中报告的那样,但du也包括类型文件中的唯一文件的大小目录)。find没有根据磁盘使用情况过滤文件的谓词。


1 对于大于 10 MB(兆字节)的文件,您需要-size +10000000c(标准) infind(L+10000000)inzsh

² 较大的文件通常会占用更多的磁盘空间,但这不一定,并且在任何情况下两者之间的关系都不是线性的。

答案3

如果您使用 zsh和ls支持-h人类可读的尺寸,你可以这样做:

ls -lhd -- **/*(.Lm+10)

它会查找所有大小大于 10MiB 的非隐藏文件并ls -ldh对其执行操作。你可能会得到参数列表太长。如果您这样做,您可以使用zargs,但随后您会遇到与使用一样复杂的情况find

另外,不要错误地指责问题,但我在大型目录上zsh执行操作时发现了奇怪的情况。**/*ls -ld /**/*(.),即使使用也zargs永远不会结束。但是......对于较小的工作,zsh一旦您掌握了语法,完成工作通常会更方便zsh

相关内容