フォルダAにはいくつかのファイルがありますが、このファイルをフォルダBにコピーしたいと思います。フォルダBには、同じ名前のいくつかのファイルが含まれています。
すべてのファイルのタイムスタンプは同じで、より大きなファイルを同じ名前で上書きしてバックアップし、同時に同じ名前の小さいターゲットファイルを上書きしてバックアップしないようにします。
cp
これはSimpleまたはrsync
。
ありがとうございます!
答え1
同じサイズのファイルをどのように処理するかは言っていませんでした。また、「A」または「B」ディレクトリのファイルを上書きするかどうかは明らかではありませんでした。
rsyncまたはcpのみを使用してこれを実行できるかどうかわかりません。この例では、「/tmp/A」はソースディレクトリ、「/tmp/B」は宛先ディレクトリ、「/tmp/C」はバックアップ先ディレクトリです。
「B」の大きなファイルをバックアップして上書きします。小さいファイルを上書きし、同じサイズのファイルに対して何もしません。
# get the size and filnames of files in '/tmp/A' directory and loop through each file found
ls /tmp/A | while read filename
do
# get the size of file in 'A' directory
sizeA=$( ls -l "/tmp/A/${filename}" | awk '{print $5}')
# get the size of corresponding file in 'B' directory
sizeB=$(ls -l "/tmp/B/${filename}" | awk '{print $5}')
# compare file sizes and perform appropriate action
if [ ${sizeB} -gt ${sizeA} ]
then
echo "file in B named \"${filename}\" is larger than A file"
# Backup and overwrite the file
cp "/tmp/B/${filename}" /tmp/C/
cp -f "/tmp/A/${filename}" /tmp/B/
else
if [ ${sizeB} -lt ${sizeA} ]
then
echo "file in B named \"${filename}\" is smaller than A file"
# overwrite the file
cp -f "/tmp/A/${filename}" /tmp/B/
else
echo "The files \"${filename}\" are the same size"
fi
fi
done
非常に限られたテストを行いましたが、うまくいくようです。慎重にテストし、必要に応じて修正してください。