Ref*_*ael 44 unix shell binaryfiles
我怎么知道文件是否是二进制文件?
例如,编译的c文件.
我想从某个目录中读取所有文件,但我想忽略二进制文件.
Ada*_*ion 49
使用实用程序file,样本用法:
$ file /bin/bash
/bin/bash: Mach-O universal binary with 2 architectures
/bin/bash (for architecture x86_64): Mach-O 64-bit executable x86_64
/bin/bash (for architecture i386): Mach-O executable i386
$ file /etc/passwd
/etc/passwd: ASCII English text
$ file code.c
code.c: ASCII c program text
Run Code Online (Sandbox Code Playgroud)
gon*_*aao 10
改编自二进制文件
find . -exec file {} \; | grep text | cut -d: -f1
Run Code Online (Sandbox Code Playgroud)
Alo*_*dal 10
我用
! grep -qI . $path
Run Code Online (Sandbox Code Playgroud)
我能看到的唯一缺点就是它会考虑一个空的文件二进制文件,但是再次,谁决定这是不是错了?
grep这是使用BSDgrep(在 macOS/Unix 上)检查单个文件的简单解决方案:
grep -q "\x00" file && echo Binary || echo Text
Run Code Online (Sandbox Code Playgroud)
它基本上检查文件是否包含 NUL 字符。
使用此方法,要使用find实用程序递归读取所有非二进制文件,您可以执行以下操作:
find . -type f -exec sh -c 'grep -q "\x00" {} || cat {}' ";"
Run Code Online (Sandbox Code Playgroud)
或者甚至更简单地使用grep:
grep -rv "\x00" .
Run Code Online (Sandbox Code Playgroud)
对于当前文件夹,请使用:
grep -v "\x00" *
Run Code Online (Sandbox Code Playgroud)
不幸的是,上面的示例不适用于GNUgrep,但是有一个解决方法。
grep由于 GNUgrep忽略 NULL 字符,因此可以检查其他非 ASCII 字符,例如:
$ grep -P "[^\x00-\x7F]" file && echo Binary || echo Text
Run Code Online (Sandbox Code Playgroud)
注意:它不适用于仅包含 NULL 字符的文件。