要查找.ext以三个关键字kwd1, kwd2and结尾并包含三个关键字的所有文件名kwd3,请在当前目录中或在当前目录下的任何位置:
find . -name '*.ext' -name '*kwd1*' -name '*kwd2*' -name '*kwd3*'
Run Code Online (Sandbox Code Playgroud)
或者,以更动态的方式设置关键字,
set -- "kwd1" "kwd2" "kwd3"
for word do
set -- "$@" -name "*$word*"
shift
done
find . -name "*.ext" "$@" -print
Run Code Online (Sandbox Code Playgroud)
或者,如果要搜索文件中的关键字:
set -- "kwd1" "kwd2" "kwd3"
for word do
set -- "$@" -exec grep -q -wF -e "$word" {} ';'
shift
done
find . -name "*.ext" "$@" -print
Run Code Online (Sandbox Code Playgroud)
我在这里使用-wFwithgrep仅对文件中-F的整个单词 ( -w) 进行字符串比较 ( ) 。
在支持命名数组的 shell 中,最后一段代码可能看起来像
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
Run Code Online (Sandbox Code Playgroud)