2012-09-27 44 views
0

如何最好地處理數組中的文件和目錄的混合。我需要通過陣列創建文件和文件夾循環數組和對象數組rm命令與-rf選項中的每一項:使用數組中的空格處理文件和目錄列表

#Build array of files to be deleted 

FILES=(
"~/Library/Preferences/Adobe InDesign" 
"~/Library/Caches/Adobe InDesign" 
"~/Library/Saved Application State/com.adobe.InDesign.savedstate" 
) 


#Loop through array deleting each file/directory with the recursive force options 

    for i in "${FILES[@]}" 

     do 

     rm -rf "$i" 

     done 

    exit 
+1

使用shell「調試」'設置-vx'會告訴你你的命令是如何被處理編輯。我敢打賭,你不需要在'$ {FILES [@]}'周圍使用dbl引號。祝你好運。 – shellter

+0

實際上這個代碼應該工作,你從它得到的任何錯誤? – mpapis

+0

@mpapis它執行時沒有錯誤。我使用shellter的方法進行調試......它在分析變量名稱中的空白時沒有做任何有趣的事情......但它不會刪除這些文件?我覺得我正在失去理智。 –

回答

2

問題不在於數組或空格,而是在文件路徑中使用~~是不是一個真正的路徑的有效部分,但外殼將替換你的主目錄的路徑替換它...除非它是在引號:

$ echo ~/Library/Preferences/Adobe InDesign 
/Users/gordon/Library/Preferences/Adobe InDesign 
$ echo "~/Library/Preferences/Adobe InDesign" 
~/Library/Preferences/Adobe InDesign 

所以,你可以把引號外~

FILES=(
~/"Library/Preferences/Adobe InDesign" 
~/"Library/Caches/Adobe InDesign" 
~/"Library/Saved Application State/com.adobe.InDesign.savedstate" 
) 

還是用$ HOME(它在雙引號得到取代):

FILES=(
"$HOME/Library/Preferences/Adobe InDesign" 
"$HOME/Library/Caches/Adobe InDesign" 
"$HOME/Library/Saved Application State/com.adobe.InDesign.savedstate" 
) 
+0

不能相信我沒有意識到殼沒有膨脹〜因爲它被引用了。感謝您接收此信息。優秀的解釋。 –

0

我有時用這一招:

with_expanded_paths() 
{ 
    typeset IFS 
    IFS="" 
    "[email protected]" 
} 
with_expanded_paths rm -rf "~/file with spaces" 

我是從記憶中寫下來的,所以可能需要稍作調整。

相關問題