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 的建议非常棒,所以请标记他!:)