bash脚本中find命令-exec参数报‘missing argument’错误的解决方法
解决bash脚本中find命令-exec参数报错的问题
这个错误的核心原因是shell错误地将分号;解析为find命令的结束符,而不是将其作为-exec选项的一部分传递给find工具。这通常是因为分号没有正确转义,或者命令换行时没有添加行延续符导致的。
正确的脚本实现方式
你可以通过以下两种方式确保命令在bash脚本中正常运行:
方式1:单行命令(与命令行完全一致)
直接将命令写入脚本,确保分号前的反斜杠\存在:
#!/bin/bash find /home/core/backup -mtime +2 -type f -exec rm -fv {} \;
方式2:多行拆分(提高可读性)
如果需要拆分命令到多行,必须在每行末尾添加反斜杠\作为行延续符:
#!/bin/bash find /home/core/backup \ -mtime +2 \ -type f \ -exec rm -fv {} \;
额外优化建议
为了提高执行效率,可以将\;替换为+,这样find会将所有匹配的文件一次性传递给rm命令,而不是逐个调用:
find /home/core/backup -mtime +2 -type f -exec rm -fv {} +
常见错误排查
- 确认脚本开头的shebang是
#!/bin/bash,避免使用#!/bin/sh(部分系统中sh是bash的简化版,可能存在兼容性问题) - 检查分号是否正确转义:必须是
\;,不能直接写; - 不要将
-exec后的内容用单引号包裹(例如-exec 'rm -fv {} \;'),这会导致find无法识别参数
内容的提问来源于stack exchange,提问作者Sara
相关产品推荐
相关产品推荐

