2014-01-28 117 views
0

所以我就以此爲回答前一個問題,作爲通過目錄中的文件遞歸地尋找和刪除的文件和目錄的答案,如果找到:爲什麼這個命令爆炸

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 

我不希望它搜索供應商。我希望它離開供應商。

我該如何解決這兩個問題?抑制和忽略。

回答

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