利用linux find命令找到非二进制的文件,排除掉 /proc /sys目录

服务器繁忙,请稍后再试。

利用linux find命令找到非二进制的文件,排除掉 /proc /sys目录

在Linux中,使用find命令结合file工具可以查找非二进制文件(通常是文本文件),并通过-prune选项排除/proc/sys目录。以下是完整命令:

1
2
3
4
5
find / \( -path /proc -o -path /sys \) -prune -o -type f -exec sh -c '
for f; do
file -i "$f" | grep -q "text/" && printf "%s\n" "$f"
done
' sh {} +

命令详解:

  1. 排除目录

    • \( -path /proc -o -path /sys \):匹配/proc/sys路径。
    • -prune:排除这些目录及其内容。
  2. 查找普通文件

    • -type f:仅搜索普通文件(排除目录等)。
  3. 检查非二进制文件

    • -exec sh -c '...' sh {} +:高效批量处理文件。
    • file -i "$f":输出文件的MIME类型(如text/plain)。
    • grep -q "text/":过滤出MIME类型为text/*的文件(文本文件)。
    • printf "%s\n" "$f":打印符合条件的文件路径。

注意事项:

  • 效率问题:遍历大量文件时可能较慢(每个文件需调用file命令)。
  • 错误抑制:若需忽略权限错误,可在find开头添加 2>/dev/null
  • 扩展匹配:如需包含JSON、XML等(MIME类型为application/*但实为文本),扩展grep部分:
    1
    grep -qE "text/|application/(json|xml|javascript|shellscript)"

示例输出:

1
2
3
4
/etc/fstab
/home/user/README.md
/var/log/syslog
...

此命令安全处理含空格/特殊字符的文件名,并高效批量处理文件。