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
各地使用的变量双引号来处理空间中的文件名。
谢谢,它完美的作品! – user2090692 2013-02-20 12:16:57