bash:从掩码列表中复制文件的最后一个版本

问题描述:

源文件夹中有一组程序,但只有最新版本必须复制到目标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),则最后一个文件被正确输出。

我哪里错了?如果这些会出现在文件名中,我该如何处理空格?

谢谢!

使用数组而不是一个字符串来保存你的元素,像这样:

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