1

源文件夹中有一组程序,但只有最新版本必须复制到目标 USB 驱动器。

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

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

那么如何在一组掩码上的 for 循环中进行 find 工作呢?

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,则正确输出最后一个文件。

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

谢谢!

4

1 回答 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

在变量周围使用双引号来处理文件名中的空格。

于 2013-02-20T11:15:09.117 回答