2012-06-06 43 views
0

我的問題是這麼多關於代碼的效率和簡單性比約爲只是完成任務的問題。該方案是這樣的:我想創建一個使用for循環遍歷/用戶時,它是在每個用戶的主目錄我想,看看是否在風格存在兩個不同的目錄bash腳本:在bash精簡條件語句(if語句)

for USER in /Users/*; do 
    if [ -d "$USER/Library/Caches/com.spotify.Client" ]; then 
     rm -rf "$USER/Library/Caches/com.spotify.Client" 

...但我需要檢查多個目錄。我如何以最優雅的方式完成這件事?我想避免使用一系列if語句,但不知道完成此操作的最佳方法。

最後,我想用find命令來查找文件,然後設置查找的結果(即,路徑找到文件)給一個變量並將其輸入到另一個命令。謝謝。

回答

2

據我瞭解您的要求,我就窩在for循環:

subdirs=(
    "Library/Caches/com.spotify.client" 
    "some/other/subdir/" 
) 

for homedir in /Users/*; do 
    for subdir in "${subdirs[@]}"; do 
     dir="$homedir/$subdir" 
     if [[ -d "$dir" ]]; then 
      rm -rf "$dir" 
     fi 
    done 
done 
+0

這正是我想要的!我可以用這裏的文件做同樣的事嗎? –

+0

上面有一個錯字:'subddir'應該是'subdir'。此外,多行變量賦值不適用於我的bash 3.2.48系統(Mac OS X 10.7.4) - 僅使用第一行。 – mklement0

+0

@ DeanA.Vassallo:要使用此文件(替代實際線打破了'\ N';請_not_引用路徑):'讀-r -d'子目錄<< EOF \ nLibrary /緩存/ com.spotify。 client \ nsome/other/subdir \ nEOF' – mklement0

1

下建立在上述@大衛Wolever的回答;這些版本更短,讓shell在前面做更多的事情。

串聯,單迴路的版本不使用中間(陣列)變量:

for dir in /Users/*/'Library/Caches/com.spotify.client/' /Users/*/'some/other/subdir/'; do 
    [[ -d "$dir" ]] && rm -rf "$dir" 
done 

數組變量版本:

subdirs=(
    'Library/Caches/com.spotify.client/' 
    'some/other/subdir/' 
) 

for subdir in "${subdirs[@]}"; do 
    for dir in /Users/*/"$subdir"; do 
     [[ -d "$dir" ]] && rm -rf "$dir" 
    done 
done