我正在使用 Amazon Linux,bash shell。我正在尝试编写一条语句来删除特定主目录中名为“target”的所有子目录。我想编写这样的内容,即使目录不存在,也不会抛出错误。我尝试了以下方法,但出现错误
[jboss@mydevbox ~]$ find ~/.jenkins/jobs/subco/workspace/myproject/ -name 'target' -print0 | xargs rm -rf
xargs: Warning: a NUL character occurred in the input. It cannot be passed through in the argument list. Did you mean to use the --null option?
上面的内容怎样写比较好?
答案1
如果您正在使用,-print0
则应该使用该-0
标志,xargs
以便它可以正确读取名称。
find ~/.jenkins/jobs/subco/workspace/myproject/ -name 'target' -print0 | xargs -0 rm -rf
或者,如果你有 GNU,find
你可以使用该-delete
标志,但如果目录不为空,它就不起作用
find ~/.jenkins/jobs/subco/workspace/myproject/ -name 'target' -delete
或者,您也可以-exec
与 find 一起使用,例如
find ~/.jenkins/jobs/subco/workspace/myproject/ -name 'target' -exec rm -rf {} +
答案2
现代find
(通过 POSIX,因此 OpenBSD 上的非 GNU确实支持这一点)可以完成必要的工作,而无需通过表单find
进行调用。xargs
-exec command {} +
find ... -exec rm -rf '{}' \+