回答
使用的工具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
find . -exec file {} \; | grep text | cut -d: -f1
这应该是'grep文本';历史上,'file'并不总是说ASCII,而是例如“shell脚本文本”。 – Jens
@Jens感谢提醒。只需检查'file'手册页,它应该是'text'。 – gongzhitaao
我刚刚意识到,再次重新发明了轮子: 用于'查找文件。 -type f -exec file {} \; | grep文本| perl -nle'split /:/; print $ _ [0]'';做grep -i --color'string_to_search'$ file;完成; –
使用Perl的内置-T
文件测试操作,最好确定这是一个后使用-f
文件测试运算符的纯文件:
$ perl -le 'for (@ARGV) { print if -f && -T }' \
getwinsz.c a.out /etc/termcap /bin /bin/cat \
/dev/tty /usr/share/zoneinfo/UTC /etc/motd
getwinsz.c
/etc/termcap
/etc/motd
下面是集合的补:
$ perl -le 'for (@ARGV) { print unless -f && -T }' \
getwinsz.c a.out /etc/termcap /bin /bin/cat \
/dev/tty /usr/share/zoneinfo/UTC /etc/motd
a.out
/bin
/bin/cat
/dev/tty
/usr/share/zoneinfo/UTC
perl -E 'exit((-B $ARGV[0])?0:1);' file-to-test
可以用来检查时“文件 - 测试”是二进制的。上面的命令将在二进制文件退出机智码0,否则退出代码是1
文本文件反向检查可以像下面的命令:
perl -E 'exit((-T $ARGV[0])?0:1);' file-to-test
同样,上面的命令将退出如果“文件测试”是文本(不是二进制),则为0。
了解更多关于-B
和-T
使用命令perldoc -f -X
进行检查。
http://perldoc.perl.org/functions/-X.html – Onlyjob
这是一种强力排除与tr -d "[[:print:]\n\t]" < file | wc -c
二进制文件,但它是没有启发式猜测要么。
find . -type f -maxdepth 1 -exec /bin/sh -c '
for file in "[email protected]"; do
if [ $(LC_ALL=C LANG=C tr -d "[[:print:]\n\t]" < "$file" | wc -c) -gt 0 ]; then
echo "${file} is no ASCII text file (UNIX)"
else
echo "${file} is ASCII text file (UNIX)"
fi
done
' _ '{}' +
不过,下面的使用grep -a -m 1 $'[^[:print:]\t]' file
的蛮力方法看起来好快得多。
find . -type f -maxdepth 1 -exec /bin/sh -c '
tab="$(printf "\t")"
for file in "[email protected]"; do
if LC_ALL=C LANG=C grep -a -m 1 "[^[:print:]${tab}]" "$file" 1>/dev/null 2>&1; then
echo "${file} is no ASCII text file (UNIX)"
else
echo "${file} is ASCII text file (UNIX)"
fi
done
' _ '{}' +
请尝试以下命令行:
file "$FILE" | grep -vq 'ASCII' && echo "$FILE is binary"
不错,但被urt8 ascii文件愚弄。我用:文件“$ FILE”| grep -vq'文字' –
我用
! grep -qI . $path
唯一的缺点我能看到的是,它会考虑一个空文件二进制但话又说回来,谁决定如果这是错误的?
不理想,但简单的解决方案来检查单个文件:
grep -q "\x00" file.bin && echo Binary file. || echo Text file.
如果这些文件由NULL字符这基本上检查。
所以读递归使用find
程序中的所有非二进制文件,你可以这样做:
find . -type f -exec sh -c 'grep -q "\x00" {} || cat {}' ";"
或者更简单的只用grep
:
grep -rv "\x00" .
对于刚刚当前文件夹,使用:
grep -v "\x00" *
关闭Bach's suggestion,我认为--mime-encoding
是从file
获得可靠信息的最佳标志。
file --mime-encoding [FILES ...] | grep -v '\bbinary$'
将打印文件file
认为具有非二进制编码。如果您只需要文件名,则可以通过cut -d: -f1
管道输出来修剪: encoding
。
- 1. 如何检查文件是否是二进制文件?
- 2. 如何检查上传的文件是否是二进制文件?
- 3. 检查文件数据是否为二进制文件
- 4. 是否可以读取文本文件并进行检查?
- 5. STLloader和three.js - 如何检查文件是二进制文件?
- 6. 用Node.js检查文件是二进制文件还是ASCII文件?
- 7. VB.Net - 检查文件是否是.NET二进制
- 8. 如何检查字符串是否在二进制文件
- 9. 如何检查HDFS文件是否包含二进制数据?
- 10. 确定文件是二进制文件还是文本文件
- 11. 如何检查文件是否是.exe
- 12. ç打开文件来检查它是否是二进制的,如果是这样打印是二进制
- 13. 如何检查文件夹中的所有文件是否只是递归读取?
- 14. 如何检查文件是否是C++中的常规文件?
- 15. 如何检查上传的文件是否是XLS文件?
- 16. 检查是否编译了“-static”的二进制文件
- 17. 如何检查文件是否为文本文件或不ASP
- 18. 如何将二进制文件(不是UTF-8)写入文件
- 19. 如何处理文件不是二进制文件(git)
- 20. 如何告诉TortoiseHg文件不是二进制文件?
- 21. 检查文件是否是有效的pgp加密文件
- 22. 如何检查新的systemd用户是否有权执行二进制文件
- 23. 如何检查linux二进制文件是否有新添加的代码
- 24. 如何检查Vim插件中PATH中是否存在二进制文件?
- 25. 检查是否在二进制文件中使用提升
- 26. Java - 并行读取二进制文件
- 27. 检测文件是二进制还是纯文本?
- 28. 检查文件是否可读为BufferedImage
- 29. 如何从二进制文件读取C文本文件?
- 30. 如何读取二进制文件
最终*所有*是二进制文件。文本文件恰好包含人类可读字符数据的二进制表示。没有任何方法可以将文本与非文本区分开100%可靠。 –
[在Vim中类似](http://vi.stackexchange.com/q/3206/467) – kenorb