10

我想在我的 Linux 机器上找到人类可读的文件,没有文件扩展名限制。这些文件应该是人类感知文件,如文本、配置、HTML、源代码等文件。有没有办法过滤和定位?

4

3 回答 3

23

利用:

find /dir/to/search -type f | xargs file | grep text

find会给你一个文件列表。

xargs filefile将在管道输入的每一行上运行命令。

于 2016-02-03T15:47:29.307 回答
7

findfile是你的朋友:

find /dir/to/search -type f -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print

这将在/dir/to/search中找到任何文件(注意:它不会找到符号链接目录套接字等,只有常规文件)并运行 sh -c 'file -b {} | grep 文本 &>/dev/null' ; 它查看文件类型并在描述中查找文本。如果这返回 true(即,文本在行中),那么它会打印文件名。

注意:对文件使用 -b 标志意味着不打印文件名,因此不会对grep产生任何问题。例如,如果没有该-b标志,二进制文件 gettext 将被错误地检测为文本文件。

例如,

root@osdevel-pete# find /bin -exec sh -c 'file -b {} |  grep text &>/dev/null' \; -print
/bin/gunzip
/bin/svnshell.sh
/bin/unicode_stop
/bin/unicode_start
/bin/zcat
/bin/redhat_lsb_init
root@osdevel-pete# find /bin -type f -name *text*
/bin/gettext

如果要查看压缩文件,请使用该--uncompress标志来归档。有关文件的更多信息和标志,请参阅man file

于 2013-01-24T16:06:53.120 回答
0

这也应该可以正常工作:

file_info=`file "$file_name"` # First reading the file info string which should have the words "ASCII" or "Unicode" if it's a readable file

if grep -q -i -e "ASCII" -e "Unicode"<<< "$file_info"; then
    echo "file is readable"
fi
于 2020-03-07T09:37:08.233 回答