2011-03-10 24 views
1

工作我試圖在Linux中運行bash腳本(Ubuntu的,但也Fedora的),但它find命令將無法正常工作。查找沒有腳本的工作,在終端提示

search=\"*${exten[iterext]}\" 
find $direc{iterdir} $r_option -iname $search exec -rm {} \\\; 

我們解釋變量: 訊號分配延長是陣列從一個文本文件中讀取的文件擴展名(這裏沒問題) 直銷也通過命令行讀取目錄的數組。 Iterdir和iterext是cicle整型變量。

現在我有兩個問題:

1-這find命令不會刪除或顯示爲此事,如果我運行一個腳本里面;不過,如果我在查找之前放置一個回顯,並將輸出粘貼到命令提示符下,則查找工作正常。我試過在ubuntu下和Fedora的劇本,所以我認爲這不是一個bash的配置問題。我應該注意,這個問題似乎是$ search,因爲我用一個硬編碼的字符串(如「* txt)替換了$ search,它在腳本內部工作,所以它似乎是一個引用問題。

2 - 我運行整個find命令也得到發現:。缺少參數「-exec」

請幫助:-(它的駕駛我瘋狂

回答

2

開始簡單放置在find命令,然後一切都不用擔心參數化它

  1. ${exten[iterext]}應該${exten[$iterext]}
  2. $direc{iterdir}應該${direc[$iterdir]}
  3. exec -rm應該-exec rm
  4. \\\;應該\;
  5. 引用您的變量,以防止分詞

下面將進行幹運行感謝到echo。只需刪除echo您滿意進行刪除輸出的時候。

find "${direc[$iterdir]}" "$r_option" -name "*${exten[$iterext]}" -exec echo rm {} \; 
+0

輝煌!!!!有用。非常感謝你! – PTGuy 2011-03-10 20:59:11

+0

@PTGuy:NP,歡迎StackOverflow的,不要忘記點擊勾選接受的答案。 – SiegeX 2011-03-10 21:00:06

+0

完成:-)在bash行情可能會有點daunting.Yeah(因爲我是一個VM內運行手寫)我沒有正確複製的代碼,但它仍然是錯了,所以......感謝既爲幫助 – PTGuy 2011-03-10 21:17:35

0

您對報價的使用對我來說似乎有點奇怪。試試這個:

find "$direc{iterdir}" $r_option -iname "*${exten[iterext]}" -exec -rm "{}" ";" 

哦,並用-x選項運行你的shell腳本。這將在執行之前打印每個命令行。

set -x 
find "$direc{iterdir}" $r_option -iname "*${exten[iterext]}" -exec -rm "{}" ";" 
set +x 
+0

他的命令有許多問題不僅僅是引號,請參閱我的答案中的列表。 – SiegeX 2011-03-10 20:59:13

+0

是的,在閱讀你的答案後,我注意到了。到目前爲止我沒有使用數組變量,所以我沒有發現那個錯誤。 – 2011-03-10 21:03:20