2011-10-27 48 views
0

可能重複:
Unix 「find」 command usage使用 「查找」 在bash過濾多個匹配

這是一個bash的安裝腳本。腳本foo.sh以「DIRECTORY」作爲參數。說,有一個目錄/ TEST/TEST_1A/TEST_2A/TEST_3和另一個目錄/ TEST/TEST_1B/TEST_2B/TEST_3。

腳本:foo.sh簡要介紹。

DIR=`find $HOME -type d -name $1 | head 1' 
if [ DIR is set to a directory ] 
then 
rm -rf $DIR 

用法:foo.sh TEST_3

從劇本

現在,只有/測試/ TEST_1A/TEST_2A/TEST_3可以被刪除。要刪除/ TEST/TEST_1B/TEST_2B/TEST_3,我需要在我的find命令中使用reg exp來精細調整remove以解決目錄衝突。

修改了發現上面的腳本部分如下

DIR='find $HOME -type d -regexp $1 | head 1 

新的使用:/ foo.sh TEST_2B TEST_3

但 「查找」 命令無法得到DIR設爲/ TEST/TEST_1B/TEST_2B/TEST_3,而是返回空&作爲一個結果DIR是空的,我永遠不會刪除/ TEST/TEST_1B/TEST_2B/TEST_3

如何更改腳本,以便查找可以僅處理目錄名稱,也可以處理目錄路徑中的NO問題。事實上,一些用戶可能會給部分目錄路徑作爲參數「foo.sh」。我希望「foo.sh」的工作,即使是在這樣的情況下

+1

看起來您可以自由交換'\''和'''字符。這只是在你張貼在這裏嗎?或者你的腳本試圖用'''代替'\''字符? – sarnold

+1

..你是否知道'head(1)'命令實際_does_? – sarnold

+0

您不能像在「新使用情況」部分中那樣指定子目錄/路徑,並期望它與任何內容匹配。在指定的目錄結構中找到文件條目的搜索(文件是否是真實文件或是目錄),你要求它一次搜索2個關卡,還有你是否要刪除這兩個TEST_3目錄?你確定你想要刪除的目錄將**總是**成爲列表中的第一個?更好的向我們展示來自所有例子的輸出(如DIR)。祝你好運。 – shellter

回答

0

如果我這樣做,我只想連鎖這一切:

find $HOME -type d -name $1 | grep '\bTEST_.*?A\b' | xargs rm -rf 

這將刪除所有目錄,只有當他們是在包含「TEST_A」的路徑