我正在尝试编写一个 bash 脚本,该脚本查看一个充满文件的目录并将它们分类为纯文本或二进制文件。如果文件仅包含纯文本字符,则文件为纯文本,否则为二进制。到目前为止,我已经尝试了以下 grep 排列:
#!/bin/bash
FILES=`ls`
for i in $FILES
do
########GREP SYNTAX###########
if grep -qv -e[:cntrl:] $i
########/GREP SYNTAX##########
then
mv $i $i-plaintext.txt
else
mv $i $i-binary.txt
fi
done
在 grep 语法行中,我也尝试了不带 -v 标志并交换 if 语句的分支的相同方法,以及与 [:alnum:] 和 [:print:] 相同的两种组合。所有这六种变体都会产生一些标记为二进制的文件,其中仅包含 plantext 和一些标记为纯文本的文件,其中至少包含一个不可打印的字符。
我需要找到一种方法来识别只包含可打印字符的文件,即 AZ、az、0-9、标点符号、空格和换行符。包含不在此集合中的任何字符的所有文件都应归类为二进制文件。
半天来,我一直在用头撞墙试图对它进行分类。帮助!在此先感谢,瑞克