执行 Shell 脚本时缺少“-exec”参数,但在命令行上运行正常

执行 Shell 脚本时缺少“-exec”参数,但在命令行上运行正常

我这里有这个 Shell 脚本:

###
# Create a folder dynamically
mkdir archived_PA_"$(date -d "6 months ago - 1 day" +%Y-%m-%d)"_"$(date -d "1 day ago" +%Y-%m-%d)"

# Move files to new folder dynamically
find ./VA -newermt $(date +%Y%m%d -d '6 months ago') ! -newermt $(date +%Y%m%d -d 'today') -exec mv -t /var/log/pentaho/archived_PA_"$(date -d "6 months ago - 1 day" +%Y-%m-%d)"_"$(date -d "1 day ago" +%Y-%m-%d)" {} +

# Archive dynamic folder 
zip -r archived_PA_"$(date -d "6 months ago - 1 day" +%Y-%m-%d)"_"$(date -d "1 day ago" +%Y-%m-%d)".zip /var/log/pentaho/archived_PA_"$(date -d "6 months ago - 1 day" +%Y-%m-%d)"_"$(date -d "1 day ago" +%Y-%m-%d)"

起初,每一行在命令行上都运行良好,但是当我使用此命令运行此 Shell 脚本时./script_name.sh,我会收到以下错误:

./HIX-170061.sh: line 4: $'\r': command not found
find: missing argument to `-exec'
./HIX-170061.sh: line 7: $'\r': command not found
  adding: var/log/pentaho/archived_PA_2023-01-09_2023-07-09^M/ (stored 0%)

简而言之,我能够执行其他行(除了第 4 行和第 7 行,但它是空行,所以我认为这并不重要),但第 6 行是我收到错误的地方,这是find: missing argument to `-exec'错误。

答案1

这些$'\r'消息意味着脚本包含由回车符 (CR) 字符和换行符组成的 Windows 行结尾,并且 bash 将回车符视为非空格字符。

发生错误find的原因是传递给它的最后一个参数将是一个加号,后跟一个回车符,而不是预期的加号本身会终止命令-exec

运行dos2unix脚本应该可以解决问题。

答案2

我用 Notepad++ 解决了这个问题。我只需转到“编辑”->“EOL 转换”->“Unix”,然后就可以运行该脚本了。

相关内容