我可以找到所有扩展名为 .log 的文件并按文件大小排序吗?

我可以找到所有扩展名为 .log 的文件并按文件大小排序吗?

我使用的是CentOS 6.8

我想知道是否可以找到所有具有 .log 扩展名的文件并按文件大小排序并在文件名旁边显示文件大小?

我目前正在使用此命令查找所有具有 .log 扩展名的文件:

find .  -name \*.log

答案1

这似乎对我有用:

find .  -name \*.log -ls | sort -r -n -k7

在哪里...

find=https://man7.org/linux/man-pages/man1/find.1.html

.= 当前文件夹

-name= 允许您搜索文件名模式,在这种情况下,星号前面有一个斜杠,以允许它成为通配符。

-ls= 以格式列出输出ls -dils

sort=https://man7.org/linux/man-pages/man1/sort.1.html

-r= 反转结果,从最大到最小

-n= 将它们作为数值进行比较

-k= 对字段进行排序,在本例中,第 7 个字段在输出中具有大小变量

您还可以添加| head -n 20到此末尾以获取前/最大 20 个文件。

答案2

这里有两个选择;一种以 bash 为中心,另一种只是为了好玩。


( shopt -s globstar dotglob; stat --format "%s %n" -- **/*.log | sort -rn )

这:

  • 在子 shell 中运行,因此shopt语句不会影响当前/正在运行的 shell。
  • 设置 globstar 和 dotglob外壳选项; globstar 允许使用**语法来匹配子目录中的文件; dotglob 使 shell 通配符能够匹配以 a 开头的目录.
  • stat是我们收集文件大小及其名称的方式;它默认安装在 CentOS 系统上——它不是 POSIX 指定的。
  • 这里真正的工作是由 globstar 完成的**/*.log,它收集当前目录和任何子目录中的匹配文件名 (*.log)。
  • 然后,我们对文件大小和名称进行反向数字排序,以首先获得最大的文件(-n不使用r则按大小升序对它们进行排序)。

另一种以 bash 为中心的选项,但也使用标志ls来按大小对其参数进行排序:

shopt -s globstar dotglob
ls -lS **/*.log

# or, in reverse:

ls -lrS **/*.log

为了锻炼您的系统和耐心,您可以按特定顺序搜索特定大小的文件:

for((i=9223372036854775807;i>=0;i--)); do find . -name \*.log -size ${i}c -exec stat --format "%s %n" {} + ; done

运行 9,223,372,036,854,775,807(超过9 千万亿)find命令,查找每种可能大小的 *.log 文件,再次调用stat以仅显示文件大小和名称。如果有多个相同大小的文件,我包含了 find 的{} +语法来传递尽可能多的文件名以stat适应环境。您可能需要for根据 shell 的整数大小或者您是否知道最大日志文件有多大来调整循环范围。这个“选项”的“好处”是,如果您stat用简单的ls.

答案3

请运行以下命令列出所有名为 log 的文件夹及其大小。

du -csh $(find / -type d -iname log)

答案4

尝试这个命令:

 find .  -name \*.log |ls -lSh

相关内容