查找所有日志文件并按大小排序
在 Linux 系统中,查找所有以 .log 结尾的文件,并按文件大小从大到小排序,可以使用以下命令组合:
find / -name "*.log" -type f 2>/dev/null | xargs ls -Slh
命令详解
- find / -name "*.log" -type f 2>/dev/null
find /: 从根目录开始查找。-name "*.log": 匹配所有以.log结尾的文件名。注意,通配符*必须用引号括起来,以防止 Shell 提前展开。-type f: 只查找普通文件,排除目录、链接等。2>/dev/null: 将查找过程中产生的错误信息(如权限不足)重定向到空设备,使输出更清晰。
- |
- 管道符,将前一个命令(
find)的标准输出传递给后一个命令(xargs)作为输入。
- 管道符,将前一个命令(
- xargs
- 将管道传递过来的文件路径列表,转换为
ls命令的参数。
- 将管道传递过来的文件路径列表,转换为
- ls -Slh
-S: 按文件大小排序。-l: 使用长列表格式,显示详细信息。-h: 以人类易读的格式(如 K、M、G)显示文件大小。- 若需从小到大排序,可使用
-Slhr或-Slr(-r表示反向排序)。
注意事项与替代方案
上述命令在文件路径包含空格或特殊字符时可能出错。更健壮的写法是使用 find 的 -exec 或 -print0 选项:
# 方法一:使用 -exec
echo "文件大小(K) 文件路径"
find / -name "*.log" -type f 2>/dev/null -exec ls -lh {} ; | sort -hr -k5
# 方法二:使用 -print0 处理特殊字符
find / -name "*.log" -type f 2>/dev/null -print0 | xargs -0 ls -Slh
方法一通过 sort -hr -k5 对 ls -lh 输出的第5列(文件大小)进行反向排序,同样能实现按大小(人类可读格式)排序的效果,且兼容性更好。