Linux shell脚本的正确语法

Linux shell脚本的正确语法,linux,ubuntu,sh,Linux,Ubuntu,Sh,我正在尝试创建一个并将其添加到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 {} \; &

我正在尝试创建一个并将其添加到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
如果我直接在shell上运行这些命令,我不会得到任何错误。 但是如果说我已经将其存储在一个名为compress的文件中,并将脚本作为./compress运行 我得到了错误-

find: missing argument to `-exec'

我犯了什么错误,我该如何改正

为第一个
find
命令构建参数数组,而不是依赖命令替换

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

您有两个
find
命令,都有
-exec
选项。哪一个失败了?不能说-在控制台上只打印我写的错误。因为我试着一个接一个地取出每一个语句,没有错误。当两行都存在时,只有它抛出错误。这可能与一个
find
缺少搜索路径有关吗?可能是第一个
find
命令中的
-exec
在分号之前缺少了反斜杠?嗯。我按照您的建议添加了反斜杠并再次运行commnd,但仍然是相同的错误。另外,命令的顺序如何?第二个命令创建第一个命令使用的文件
processs.txt
…谢谢Chepner。这很好用。在哪里可以获得构建此shell脚本的参考?
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