Чтобы найти все имена файлов, оканчивающиеся на .ext
и содержащие три ключевых слова 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
с 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
Параметрcrontab
command
НЕ равен bash
. command
просто передается системному вызову execve
без интерпретации. Делайте свои bash
измы (как[[
)в своем скрипте bash
, а не в параметре crontab
command
.