つまり、拡張子が「。desktop.in」のファイルのバックアップがあり、ファイル拡張子が「。desktop」でファイルのみのコピー先にコピーしたい宛先にすでに存在します。
a.desktopおよびb.desktopファイルのみを上書きしたい
これを試しました:
for file in /destination/*.desktop;do cp /src/"${file##*/}".in "$file";done
しかし、それはそのタスクに最適化されているようには見えません。
あなたはそれをするより良い方法を知っていますか?
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と--existing:
for file in /src/*.desktop.in; do
rsync --dry-run --existing --verbose "/src/${file}" "/dest/${file%.in}"
done
for file in /destination/*.desktop; do echo cp "/src/${file##*/}.in" "$file"; done
すべてが良好に見える場合は、echo
を削除します。
あなたが持っているものは基本的にそれが得るのと同じくらい良いです。
ファイルを列挙しているディレクトリに移動することで、ファイル名の操作を少し節約できます。パフォーマンスではなく、読みやすさの問題です。
set -e
cd /destination
for file in *.desktop; do
cp "/src/$file.in" "$file"
done
失敗をチェックすることを忘れないでください。