私はOver the Wire - Bandit戦争ゲームのレベル4を通過しようとしています。このレベルでは、フォルダ内の人が読める固有のファイルに保存されているパスワードを見つける必要があります。
これで、ファイルがほんの数しかないので、各ファイルに対してコマンドを使用してそのタイプを確認したfile
後、ASCIIファイルを開いたことがわかりました。この検索を自動化できるように、file
結果をfind
コマンドに渡す方法があるかどうか疑問に思います。
(非常にマイナーな質問のようですが、まだ答えが見つかりません。)
事前にありがとう
答え1
grep -I
ASCII以外のファイルは無視されます。これは非標準オプションですが、grep
多くの人が実装しています。
find thefolder -type f -exec grep -q -I . {} ';' -print
thefolder
これはASCII(に従って)以下にあり、空でないすべてのファイルを一覧表示します(単一の文字を見つける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 {} +