我想要一个简单的命令(可能使用find
)来查找所有文件 > 某种大小(以字节、千字节、兆字节或千兆字节为单位),并在找到它们时打印它们的大小。
例如,此命令查找所有大于 10 MB 的文件,但遗憾的是不显示其大小:
find . -size +10M
也可以看看:
- 大于 1 GB 且超过 6 个月的文件- 不显示尺寸
- Linux 显示目录中大于 1 GB 的文件并显示大小- 接受的答案看起来比预期更复杂,我不需要排序。
- 查找大于X值的文件,按大小排序,以ls格式显示- 我不需要也不想要
ls
格式,主要答案可能不适用于空格 - https://linuxconfig.org/how-to-use-find-command-to-search-for-files-based-on-file-size
答案1
怎么样:
find -size +10M -exec du -h {} \;
答案2
请注意, M
infind . -size +10M
是 GNU 扩展。 GNU 实现find
有另一个扩展:-printf
您可以使用它来打印这些文件的大小:
find . -size +10M -printf '%s %p\n'
报告大小超过 10MiB(兆字节,而不是兆字节)的文件的s
大小和ath。p
在这里,您还可以使用zsh
and 其stat
内置限定符和 glob 限定符:
zmodload zsh/stat
stat -nL +size -- **/*(LM+10)
这将打印文件路径后的大小。另请注意,与 相反find
,默认情况下排除隐藏文件(您可以使用D
限定符将它们添加回来)。
或者在olumnsprint
r
上写 aw (十字):2
C
a
stat -nLA report +size -- **/*(LM+10)
print -raC2 -- $report
请注意,所有这些-size
, %s
,+size
都考虑文件的尺寸,这与文件的不同磁盘使用情况² 如du
(或%b
/ %k
ingfind -printf
或+block
inzsh
的 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
。