打印包含多个字符串的文件名

Bhu*_*ale -1 grep find

假设我有多个文件,其.ext扩展名包含多行。我需要打印包含所有3个关键字的文件名:kwd1,kwd2,和kwd3。

我该怎么做?

Kus*_*nda 6

要查找.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)