仅当文件已存在时才将文件复制到目标文件夹。但源文件具有不同的文件扩展名

仅当文件已存在时才将文件复制到目标文件夹。但源文件具有不同的文件扩展名

仅当文件已存在时才将文件复制到目标文件夹。但源文件具有不同的文件扩展名。

即我有一些文件的备份“.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

相关内容