ターゲットディレクトリがある場合にのみrsyncを実行しますか?

ターゲットディレクトリがある場合にのみrsyncを実行しますか?

通常、オフサイトに保存されますが、時にはマウントされるセカンダリバックアップドライブがあります。インストールされている場合は、バックアップドライブをセカンダリバックアップに自動的に複製する機能をcrontabに追加したいと思います。私は次のことができることを知っています。

if [ -d $target_dir ]; then rsync -a --delete $src_dir $target_dir; fi

しかし、シェルスクリプトを使用せずにrsyncに同じ操作を要求する方法があるかどうか疑問に思います。 6.02*10^23 コマンドラインオプションがあることを考慮すると...

ベストアンサー1

これはうまくいくトリックです...私の例では、$ target_dirが「リモート」システム(localhost)にある場合はrsyncが成功し、そうでなければ失敗します(リモートrsyncを実行しません)。

つまり

src_dir=/etc;target_dir=/test/a;rsync -azp --rsync-path="[[ -d $target_dir ]] && rsync" $src_dir localhost:$target_dir

リモートディレクトリが存在しない場合、失敗結果コードは12でなければなりません。これは、次の失敗のために実際にリモートrsyncを実行しないためです。"[[ -d $target_dir ]]"

12 Error in rsync protocol data stream

これを行うにはTCPソケットを使用する必要があるため、速度が遅くなる可能性があります。

別のオプションは次のような/etc/crontabものです(スクリプトは必要ありません)。

50 23 * * * root (src_dir="/test/src_dir"; target_dir="/test/target_dir"; [ -d $src_dir ] && [ -d $target_dir ] && rsync -a -v --delete ${src_dir}/ ${target_dir}/) &>> /var/log/test.log

おすすめ記事