Правильный синтаксис для сценария оболочки - PullRequest
0 голосов
/ 30 января 2019

Пытаюсь создать и добавить то же самое в cron.Это команды, которые я пытаюсь выполнить через скрипт.

#!/bin/bash
find . -mmin -60 -name "*.jpg" $(printf "! -name %s " $(cat processed.txt) ! -name cache) -exec convert -resize 1000x800 -quality 85% {} {};
find  -mmin -60 -type f -name "*.jpg" -exec basename {} \; &> processed.txt

f Я запускаю эти команды непосредственно в оболочке, я не получаю никакой ошибки.но если, скажем, я сохранил это в файле с именем compress и запустил скрипт как ./compress, я получаю ошибку -

find: missing argument to `-exec'

, какую ошибку я делаю и как я могу это исправить.

1 Ответ

0 голосов
/ 30 января 2019

Создайте массив аргументов для первой команды find вместо того, чтобы полагаться на подстановку команд.

while IFS= read -r line; do
  processed+=(! -name "$line")
done < processed.txt

Ваша непосредственная проблема заключается в том, что вы забыли экранировать точку с запятой, чтобы онатрактоваться как аргумент find, а не как терминатор команды.

find . -mmin -60 -name "*.jpg" "${processed[@]}"  \
  ! -name cache  -exec convert -resize 1000x800 -quality 85% {} {} \;
#                                                                  ^^
find  -mmin -60 -type f -name "*.jpg" -exec basename {} \; &> processed.txt
...