列出/查找所有子目录中除二进制文件之外的所有常规文件

列出/查找所有子目录中除二进制文件之外的所有常规文件

在 Linux 中。

我知道我可以这样做find . -type f,但其中包括二进制文件,我找不到用 find 排除它们的方法

答案1

file /usr/bin/file例如,在我的系统上, 的输出中不包含单词“binary”。如果file -i可用,则包含单词“binary”。如果没有-i,测试单词“text”的存在可能更可靠。

find -type f -exec sh -c "file {} | grep text >/dev/null" \; -print

或者

find -type f -exec sh -c "file {} | grep text >/dev/null" \; -ls

使用-i

find -type f -exec sh -c "file -i {} | grep -v binary >/dev/null" \; -print

使用file只是一个近似值,因为它使用启发式方法来确定文件类型,并且没有对“二进制”文件的构成进行严格的定义。空文件是“二进制”的吗?file答案是肯定的。此外,有很多(通常不常见的)方法可以通过 触发误报 ID file

答案2

另一种方法是排除所有为用户、组或其他人设置了执行权限的文件:

find . -type f ! -perm /u=x,g=x,o=x

(如果二进制等于执行权限......)

答案3

显示所有没有可执行权限的文件(虽然这不是专门的二进制文件,所以可能不是您所需要的):

ls -l | awk '{if ($1 !~ /x/) print $8}'

答案4

尝试以下命令:

find . -type f -exec file "{}" \; | grep -vE "ELF|archive"

相关内容