我这里有这个 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”,然后就可以运行该脚本了。