有一种情况我需要shell或bash脚本来确定文件是否是二进制文件。这里的问题是linux环境没有grep
可用,而-I
版本来自busybox,它不支持perl
。我找到了一个#!/bin/sh
is_text_file() {
# grep -qI '.' "$1" ### busy box grep doesn't support
perl -e 'exit((-B $ARGV[0])?1:0);' "$1" ### works but is slow
}
do_test_text_file_on_dir() {
for f in "$1"/*; do
[ -f "$f" ] || continue
if is_text_file "$f"; then
echo "$f" is not a binary file
fi
done
}
do_test_text_file_on_dir ~/testdir
方法(perl版本旧支持-e但不支持-E),但它很慢。有没有人有更快的方法来确定文件是否是二进制文件? TIA !!
typedef struct
{
int someVal;
} foo;
答案 0 :(得分:3)
通过在Perl中完成所有工作,避免重复加载perl
所花费的时间。
#!/usr/bin/perl
for (@ARGV) {
stat($_)
or warn("Can't stat \"$_\": $!\n"), next;
-f _ && !-B _
or next;
print("\"$_\" isn't a binary file\n");
}
用法:
do_test_text_file_on_dir ~/testdir/*
注意:!-B _
相当于-T _
,但空文件除外。