sh 脚本使用 find 和 exec rm 删除 txt 文件,警告我缺少 exec 参数

sh 脚本使用 find 和 exec rm 删除 txt 文件,警告我缺少 exec 参数
find /full/path/dir -name '*.txt' -exec /bin/rm {} \;

在 shell 中很好,但是将它与一些类似的行一起弹出到 sh 脚本中,以使其从 cronjob 每晚运行,然后它会报告:

find: missing argument to `-exec'

在所有情况下。我尝试了反斜杠和引号的所有组合。我该如何让它工作?

答案1

您的脚本文件中可能包含 Windows 行尾。请尝试运行dos2unix它来转换它们。

您可以在 shell 提示符下使用以下命令重现此错误:

$ find ... \;^M

Ctrl通过按- v Ctrl-添加“^M”m

答案2

我无法想象为什么

find /full/path/dir -name '*.txt' -print0 | xargs -0 rm

不会起作用。要测试你的 cronjob,请执行以下操作:

find /full/path/to/dir -name '*.txt' -print0 | xargs -0 >/tmp/logfile

它只会回显 xargs 将删除的内容,/tmp/logfile以便您可以手动检查。

答案3

当 find 与任何符合该条件的文件不匹配,然后尝试使用空堆栈执行 rm 并返回该错误时,就会发生此错误。

不过 Phil 的建议非常棒,所以请标记他!:)

相关内容