"file"コマンドの結果をfindコマンドに渡します。

"file"コマンドの結果をfindコマンドに渡します。

私はOver the Wire - Bandit戦争ゲームのレベル4を通過しようとしています。このレベルでは、フォルダ内の人が読める固有のファイルに保存されているパスワードを見つける必要があります。

これで、ファイルがほんの数しかないので、各ファイルに対してコマンドを使用してそのタイプを確認したfile後、ASCIIファイルを開いたことがわかりました。この検索を自動化できるように、file結果をfindコマンドに渡す方法があるかどうか疑問に思います。

(非常にマイナーな質問のようですが、まだ答えが見つかりません。)

事前にありがとう

答え1

grep -IASCII以外のファイルは無視されます。これは非標準オプションですが、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 {} +

関連情報