2014-01-28 186 views
0

這是一個簡單的命令:rm -rf dir但是我有一個有趣的問題需要解決。我的bash腳本調用一個作曲家腳本composer install,這則使得vendor/app-name/composer install在運行目錄這是很好的,問題是我現在做這樣的事情:在bash中刪除目錄

cp -R /vendor/ . 
# I believe this is correct for copying everything 
# out out of vendor and into root 

一切從供應商複製。確定這是定義的,但可能有300個應用程序名稱文件夾(顯然,所有的名稱都不同於應用程序名稱),每個文件夾可能有一個.gitignore,.git目錄或文檔目錄。我想說的是:通過每個文件夾的

步行,尋找git的/,或的.gitignore文件,並刪除他們,如果發現。

我該怎麼在bash中做到這一點?

note:所有被拉下的軟件包都通過git下拉,用戶可以選擇添加從composer package land中拉下的附加軟件包。同樣的概念仍然適用。

回答

5

要刪除的.git/的.gitignore,或文檔的一切,你可以嘗試:

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

我從來沒有用過-o以前,很高興今天學到了一些東西:-) –

+0

@chepner thanx! –

+0

我會將'-type d'添加到傳遞給'find'的參數。此外,路徑名缺失(應在第一個選項之前進行)。 – kostix

3

也許有更好的方法,但是從我的頭頂,我這樣做:

find . -type d -iname .git | xargs rm -rf 
find . -type f -iname .gitignore | xargs rm 
find . -type d -iname Documentation | xargs rm -rf 

第一行刪除名爲git的,第二行中的所有文件命名的.gitignore,第三行中的所有文件夾中的所有文件夾命名文檔。

+1

您也可以使用'-exec'選項'find'在'找 。 -type d -iname .git -exec rm -rf {} \;'注意轉義的';'。如果你不逃避它,它將無法工作。 – Cfreak