有一种情况,我需要一个shell或bash脚本来确定一个文件是否是二进制文件。 这里的问题是Linux环境没有可用的file
, grep
版本是从不支持-I
busybox。 我发现一个perl
方法(perl版本是旧的支持-e但不是-E)它的工作,但它很慢。 有没有人有更快的方法来确定文件是二进制的? TIA!
#!/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中完成所有工作,避免重复加载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 _
,空文件除外。