題 如何使用終端遞歸刪除所有.svn文件夾?


我可以在終端輸入什麼命令,以便我可以刪除所有命令 .svn 文件夾(和所有子目錄)中的文件夾,但不刪除任何其他內容?


51
2018-02-09 16:33


起源


也許你可以 svn export path/to/repo path/to/export/to 代替... - Jonny
關於 svn export 是不會復制不屬於svn的文件。例如,我想為使用Cocoa Pods的iOS應用程序執行此操作,我們不提交Pods文件夾。然後從輸出中跳過了這個。我最終使用類似於Rich的答案來滿足我的需求。 - jackofallcode


答案:


cd to/dir/where/you/want/to/start
find . -type d -name '.svn' -print -exec rm -rf {} \;
  • 使用find,它執行遞歸
  • 在當前目錄中。
  • filetype是 目錄
  • filename是.svn
  • 打印與此相符的內容(.svn dirs)
  • 執行命令 rm -rf (thing found from find)。 {}是佔位符 找到實體
  • 的;告訴我發現exec的命令已經完成。 既然貝殼也有什麼想法;是的,你需要逃避它 用\使shell不會對它做任何特殊處理,只是傳遞給find

115
2018-02-09 16:53



好的解決方案而 find 具有 -delete 它不會刪除非空目錄。這種方法比例如開始匹配整個文件路徑的一部分。 - Daniel Beck♦
偉大,完美......它奏效了!謝謝 - Mikey
我建議不要運行它 -exec rm -rf {} \; 第一次確保它只找到你想要的東西。我從來沒有遇到過我不小心刪除錯誤的問題,因為我總是先檢查一下。 - Rob
@Rob好點,我通常做-exec echo rm -rf {} \;然後刪除迴聲。 - Rich Homolka
-exec rm -rf {} + 可能要快很多倍,因為它不需要發射太多 rm 實例。相反,它在一次調用中打包最大量的參數(在這種情況下要刪除的目錄)。這是可能的,因為 rm 接受多個參數。 - Daniel B