仅当文件已存在时才将文件复制到目标文件夹。但源文件具有不同的文件扩展名。
即我有一些文件的备份“.desktop.in“扩展名,我想复制到文件扩展名所在的目标”。桌面" 并且仅包含目标中已存在的文件。
源文件夹包含:
- a.桌面.in
- b.桌面.in
- c.桌面.in
目标文件夹包含:
- a.桌面
- b.桌面
只想覆盖a.桌面和b.桌面文件
尝试过这个:
for file in /destination/*.desktop;do cp /src/"${file##*/}".in "$file";done
但这看起来并没有针对该任务进行优化。
你知道更好的方法吗?
答案1
for file in /destination/*.desktop; do echo cp "/src/${file##*/}.in" "$file"; done
如果一切看起来都不错,请删除echo
.
答案2
你所拥有的基本上已经尽善尽美了。
您可以通过更改到枚举文件的目录来节省少量的文件名操作。这是可读性的问题,而不是性能的问题。
set -e
cd /destination
for file in *.desktop; do
cp "/src/$file.in" "$file"
done
不要忘记检查是否有故障。
答案3
找到了两种方法:
for file in /src/*.desktop.in; do
file=${file%.in}
if test -e "/dest/$(basename ${file})"
then cp "/src/${file}.in" "/dest/${file}"
fi
done
rsync 和 --existing:
for file in /src/*.desktop.in; do
rsync --dry-run --existing --verbose "/src/${file}" "/dest/${file%.in}"
done