私はMacでAutomatorを使って次の簡単なシェルスクリプトを書いています。
rsync -a --delete "/Volumes/Backup Plus/photo" "/Volumes/My Passport/photo"
rsync -a --delete "/Volumes/Backup Plus/video" "/Volumes/My Passport/video"
デフォルトでは、外部ドライブの一部のフォルダを別のドライブにバックアップします。
この時点で、両方のドライブの内容はまったく同じですが、「rsync」は詳細な再帰比較を実行するため、まだ時間がかかります。 (写真、動画フォルダはすべて1TB以上です。)
サイズ変更されたフォルダのみをバックアップすることを選択できますか?これにより、rsyncに数秒しかかかりません。まず、親フォルダのサイズである74.921.434バイトを確認すると思います。そして比較してみてください。寸法は同じです。何もする必要はないので、スクリプトの次の行に直接移動します。など..
私はそれが同じではないことを知っており、それがバックアップではないことを知っています。最悪の場合、いくつかの変更はまだ同じサイズで終わることがありますが、それでも可能性は非常に低いです。元のdeep rsyncバックアップスクリプトがまだあり、月に1回実行できます。しかし、より速い2番目のスクリプトを使用すると、毎日のバックアップを実行するのにかかる時間が大幅に短縮されます。これは言う?
答え1
寸法を確認しdu
て比較できます。
#!/bin/sh
pic_source_dir="/Volumes/Backup Plus/photo/"
pic_dest_dir="/Volumes/My Passport/photo/"
vid_source_dir="/Volumes/Backup Plus/video"
vid_dest_dir="/Volumes/My Passport/video"
if [ "$(du "$pic_source_dir")" -ne "$(du "$pic_dest_dir")" ]; then
rsync -a --delete "$pic_source_dir" "$pic_dest_dir"
fi
if [ "$(du $vid_source_dir)" -ne "$(du "$vid_dest_dir")" ]; then
rsync -a --delete "$vid_source_dir" "$vid_dest_dir"
fi
シェルが実際にbash(はい)、特に連想配列をサポートできるシェルの場合(macosのデフォルトbash)いいえ)、次のように整理できます。
#!/usr/bin/env bash
declare -A backup_dirs
backup_dirs=(
["/Volumes/Backup Plus/photo/"]="/Volumes/My Passport/photo/"
["/Volumes/Backup Plus/video"]="/Volumes/My Passport/video"
)
for src in "${!backup_dirs[@]}"; do
dst="${backup_dirs["$src"]}"
if [[ "$(du "$src")" -ne "$(du "$dst")" ]]; then
rsync -a --delete "$src" "$dst"
fi
done
Macosのbash v3.2を使用すると、間接変数拡張を使用して少しクリーンアップできます。
#!/bin/bash
pic_src="/Volumes/Backup Plus/photo/"
pic_dst="/Volumes/My Passport/photo/"
vid_src="/Volumes/Backup Plus/video"
vid_dst="/Volumes/My Passport/video"
for i in pic vid; do
t1="${i}_src"
t2="${i}_dst"
src=${!t1}
dst=${!t2}
if [[ "$(du "$src")" -ne "$(du "$dst")" ]]; then
rsync -a --delete "$src" "$dst"
fi
done