拡張子に複数の行を含む複数のファイルがあるとします.ext
。kwd1
、kwd2
および3つのキーワードをすべて含むファイル名を印刷する必要がありますkwd3
。
どうすればいいですか?
ベストアンサー1
現在のディレクトリまたは.ext
3つのキーワードで終わり、含まれるすべてのファイル名を見つけるには、次の手順を実行します。kwd1
kwd2
kwd3
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