为什么这个命令会爆炸

时间:2014-01-28 19:34:25

标签: bash

因此,我将此作为对上一个问题的回答,作为递归查看目录中的文件并删除文件和目录(如果找到)的答案:

find \( -name ".git" -o -name ".gitignore" -o -name "Documentation" \) -exec rm -rf "{}" \;

这有两个问题:

一:

find: `./adam.balan/AisisAjax/.git': No such file or directory

由于此错误,脚本的其余部分不会执行。现在我不想检查任何文件或文件夹。我不在乎它们是否存在,我想在此上抑制错误。

第二个是我也在需要从此搜索中排除的目录上收到错误:vendor/

find: `./vendor/adam.balan/AisisAjax/.git': No such file or directory

我不希望它搜索供应商。我希望它让供应商独自一人。

如何解决这两个问题?压制和忽视。

1 个答案:

答案 0 :(得分:4)

问题是您正在删除find然后尝试进入的目录。您可以使用-prune来阻止:

find \( -name ".git" -o -name ".gitignore" -o -name "Documentation" \) -prune -exec rm -rf "{}" \;

要忽略所有错误,您可以使用2> /dev/null来压缩错误消息,并使用|| true以避免set -e退出脚本:

find \( -name ".git" -o -name ".gitignore" -o -name "Documentation" \) -prune -exec rm -rf "{}" \; 2> /dev/null || true

最后,为避免降序任何名为“vendor”的目录,您可以再次使用-prune

find -name vendor -prune -o \( -name ".git" -o -name ".gitignore" -o -name "Documentation" \) -prune -exec rm -rf "{}" \; 2> /dev/null || true