linux crontab + добавить синтаксис оболочки в crontab

Чтобы найти все имена файлов, оканчивающиеся на .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
0
29.09.2020, 15:57
1 ответ

ПараметрcrontabcommandНЕ равен bash. commandпросто передается системному вызову execveбез интерпретации. Делайте свои bashизмы (как[[)в своем скрипте bash, а не в параметре crontabcommand.

-2
18.03.2021, 23:01

Теги

Похожие вопросы