ファイルがすでに存在する場合にのみ、ターゲットフォルダにコピーします。ただし、ソースファイルのファイル拡張子は異なります。
つまり、いくつかのファイルのバックアップがあります。」.desktop.in「拡張子、ファイル拡張子がある場所にコピーしたい」。デスクトップで、ターゲットにすでに存在するファイルのみが含まれます。
ソースフォルダには次のものが含まれます。
- a.Desktop.in
- b.desktop.in
- c.Desktop.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
2つの方法を見つけました。
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と--既存:
for file in /src/*.desktop.in; do
rsync --dry-run --existing --verbose "/src/${file}" "/dest/${file%.in}"
done