因此,我将此作为对上一个问题的回答,作为递归查看目录中的文件并删除文件和目录(如果找到)的答案:
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
我不希望它搜索供应商。我希望它让供应商独自一人。
如何解决这两个问题?压制和忽视。
答案 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