2013-02-20 86 views
1

源文件夾中有一組程序,但只有最新版本必須複製到目標USB驅動器。bash:從掩碼列表中複製文件的最後一個版本

Bash Script - Copy latest version of a file in a directory recursively,它表明我的公式是:

f=$(find . -name AdbeRdr\*.exe | sort -n | tail -1) 

那麼如何讓找到工作的內部for循環一組面具的?

set1="AdbeRdr\*.exe jre-\*.exe LibreOffice\*.msi" 
for m in $set1 
do 
    echo "m: $m" 
    f=$(find . -name $m | sort -n | tail -1) 
    echo "f: $f" 
    cp $f /media/USB 
done 

$m輸出正確的值(AdbeRdr * .EXE等),$f是空的並且cp拷貝整個父目錄。如果我明確指定了沒有變量的掩碼(find . -name AdbeRdr\*.exe | sort -n | tail -1),則最後一個文件被正確輸出。

我哪裏錯了?如果這些會出現在文件名中,我該如何處理空格?

謝謝!

回答

2

使用數組而不是一個字符串來保存你的元素,像這樣:

set1=('AdbeRdr*.exe' 'jre-*.exe' 'LibreOffice*.msi') 
for m in "${set1[@]}" 
do 
    echo "m: $m" 
    f=$(find . -name "$m" | sort -n | tail -1) 
    echo "f: $f" 
    cp "$f" /media/USB 
done 

各地使用的變量雙引號來處理空間中的文件名。

+0

謝謝,它完美的作品! – user2090692 2013-02-20 12:16:57

相關問題