Shell脚本的正确语法

时间:2019-01-30 14:17:52

标签: 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 {} \; &> processed.txt

f我直接在shell上运行这些命令,但没有收到任何错误。 但是如果说我已经将其存储在名为compress的文件中,并以./compress运行脚本 我收到错误-

find: missing argument to `-exec'

我犯了什么错误以及如何解决。

1 个答案:

答案 0 :(得分:1)

为第一个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