我使用的是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