![删除特定父目录中的特定目录时遇到问题](https://linux22.com/image/6754/%E5%88%A0%E9%99%A4%E7%89%B9%E5%AE%9A%E7%88%B6%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E7%89%B9%E5%AE%9A%E7%9B%AE%E5%BD%95%E6%97%B6%E9%81%87%E5%88%B0%E9%97%AE%E9%A2%98.png)
我正在使用 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 '{}' \+