【发布时间】:2010-09-21 09:26:40
【问题描述】:
我正在尝试编写一个 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 和一些标记为纯文本的文件,其中至少包含一个不可打印的字符。
我需要找到一种方法来识别仅包含可打印字符(即 A-Z、a-z、0-9、标点符号、空格和换行符)的文件。所有包含任何不在此集合中的字符的文件都应归类为二进制文件。
半天来,我一直在把头撞在墙上试图解决这个问题。 帮助! 提前致谢, 里克
【问题讨论】:
-
你试过
file这个命令了吗? -
@eumiro:你可能会得到错误的结果,因为它不会查看整个文件。
标签: bash grep non-printable