我试图通过《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 {} +