指定された文字列で始まるすべてのファイルをすばやく検索します。

指定された文字列で始まるすべてのファイルをすばやく検索します。

壊れたCygwinシンボリックリンクを見つけるためのコマンドを書いています。

今は以下を使用しています。

egrep -rnw . -e "^\!<symlink>"

しかし、これはあまり効率的ではありません。ファイルが次に始まるかどうかに興味がありますが、!<symlink>ファイルgrepの残りの部分を検索し続けます。

コンテンツプレフィックスでファイルを効率的に検索する方法はありますか?

ベストアンサー1

他の回答や意見に基づいて

find . -type f -exec awk '/^!<symlink>/ {print FILENAME} {nextfile}' {} +

を使用するため、できるだけ少ない回数で-exec … +実行されますawk(最大パラメータリストサイズに基づいて)。awk正規表現(検索文字列など)に一致する行が見つかった場合は、ファイル名を印刷します。 (文字列を一重引用符で囲む場合はバックスラッシュ(\)は必要ありません。)当然、行の内容も表示するには、次のように言うことができます。

{print FILENAME; print}

または

{print FILENAME ": " $0}

その後、無条件に次のファイルに移動するので、実際には各ファイルの最初の行だけを見てください。注:nextfile定義がないようです。POSIX;GNUにのみ存在することもできますawk

おすすめ記事