複数の文字列を含むファイル名の印刷

複数の文字列を含むファイル名の印刷

拡張子に複数の行を含む複数のファイルがあるとします.extkwd1kwd2および3つのキーワードをすべて含むファイル名を印刷する必要がありますkwd3

どうすればいいですか?

ベストアンサー1

現在のディレクトリまたは.ext3つのキーワードで終わり、含まれるすべてのファイル名を見つけるには、次の手順を実行します。kwd1kwd2kwd3

find . -name '*.ext' -name '*kwd1*' -name '*kwd2*' -name '*kwd3*'

または、より動的な方法でキーワードを設定するには

set -- "kwd1" "kwd2" "kwd3"

for word do
    set -- "$@" -name "*$word*"
    shift
done

find . -name "*.ext" "$@" -print

またはキーワードでファイルを検索したい場合:

set -- "kwd1" "kwd2" "kwd3"

for word do
    set -- "$@" -exec grep -q -wF -e "$word" {} ';'
    shift
done

find . -name "*.ext" "$@" -print

-wFここでは、ファイル()の全単語に対してのみ文字列比較()を実行するためにwithを使用していますgrep-F-w

名前付き配列をサポートするシェルの最後のコード部分は次のとおりです。

keywords=( "kwd1" "kwd2" "kwd3" )

and_expr=()
for word in "${keywords[@]}"; do
    and_expr+=( -exec grep -q -wF -e "$word" {} ';' )
done

find . -name "*.ext" "${and_expr[@]}" -print

おすすめ記事