将“file”命令结果传递给 find 命令

将“file”命令结果传递给 find 命令

我试图通过《Over the Wire - Bandit》战争游戏的第 4 关。该级别要求您查找存储在文件夹中唯一人类可读文件中的密码。

现在,文件只有几个,所以我所做的是,对于每个文件,使用命令检查其类型file,一找到它就打开 ASCII 文件。我想知道是否有办法将file结果传递给find命令,以便自动进行此搜索。

(感觉像是一个非常微不足道的问题,但我仍然找不到答案)。

先感谢您

答案1

grep -I忽略非 ASCII 文件。这是一个非标准选项,但被许多grep人实现。

find thefolder -type f -exec grep -q -I . {} ';' -print

这将列出 ASCII 中或以下的所有文件thefolder(根据grep)且非空(我们要求grep查找单个字符)。

使用 GNU find,您还可以轻松地忽略您没有读取权限的文件:

find thefolder -type f -readable -exec grep -q -I . {} ';' -print

这里唯一的区别是您可以避免一些“权限被拒绝”错误。

通过grep可以进行递归 grep 的实现:

grep -rlI . thefolder

按照您的建议使用file

find thefolder -type f -exec sh -c 'file "$1" | grep -qi text' sh {} ';' -print

这比第一个解决方案要慢得多,但如果您相信file它能正确发挥其魔力,那么它就可以工作。

稍微快一点(只执行sh一次或几次):

find thefolder -type f -exec sh -c '
    for pathname do
        if file "$pathname" | grep -qi text; then
            printf "%s\n" "$pathname"
        fi
    done' sh {} +

相关内容