awkを使用して複数のファイルから特定の文字列を検索しようとしたときに返されます。
'Example' is a directory: skipped.
awkを使用してすべてのサブディレクトリとファイルを検索する方法は?
使用例、
awk -F: '$3 ~ /example/' * > C:/out.txt
答え1
これはシェルワイルドカードの問題であり、awk
再帰的にglobするにはbashglobstar
オプションを有効にする必要があります。
shopt -s globstar
グローバルスター
設定されている場合、パス名拡張コンテキスト**で使用されるパターンは、すべてのファイルとゼロ以上のディレクトリとサブディレクトリと一致します。パターンの後に/が続くと、ディレクトリとサブディレクトリのみが一致します。
これにより、次のことができます。
awk -F: '$3 ~ /example/' ** > C:/out.txt
ディレクトリ自体をスキップするエラーはまだ発生しますが、そのディレクトリでも繰り返されます。 stderrを/ dev / nullにリダイレクトすることでエラーを隠すことができます。
awk -F: '$3 ~ /example/' ** > C:/out.txt 2>/dev/null
答え2
find
次の組み合わせを使用することをお勧めしますawk
。
find -type f -exec awk -F: '$3 ~ /example/' {} > c:/out.txt \;
メモ: find
*
以下のコメントで正しく指摘したように、単純な交換ではありません。find
探しているファイルセットを正確に返すには、パラメータを調整する必要があります。
メモ:A >
(相対的)はリダイレクトされる出力>>
なので、まだ必要です。find
メモ:これを使用する場合は、cmder
Windows findの代わりにGNU findを呼び出すように注意する必要がありますfind.exe
。バラよりこここれらのあいまいさを克服する方法を見つけてください。