「ディレクトリコピー(cpとrsync)」では、cpコマンドとの違いを見ましたが、rsync本来のファイル同期をしてみます。
前回と同じく、コピー元のファイルを生成します。
~$ mkdir test;cd test ~/test$ mkdir src ~/test$ (cd src;seq 30 |perl -ne 'print chr' | split -db10) ~/test$ find -type f -exec stat -c'%n %y' {} \; ./src/x02 2016-08-07 16:45:54.126639402 +0900 ./src/x00 2016-08-07 16:45:54.126639402 +0900 ./src/x01 2016-08-07 16:45:54.126639402 +0900 ~/test$
rsyncでディレクトリコピーします。
~/test$ rsync -r src/ dest ~/test$ find -type f -exec stat -c'%n %y' {} \; ./src/x02 2016-08-07 16:45:54.126639402 +0900 ./src/x00 2016-08-07 16:45:54.126639402 +0900 ./src/x01 2016-08-07 16:45:54.126639402 +0900 ./dest/x02 2016-08-07 16:46:36.102638657 +0900 ./dest/x00 2016-08-07 16:46:36.102638657 +0900 ./dest/x01 2016-08-07 16:46:36.102638657 +0900 ~/test$
rsyncをもう一度実行して、destディレクトリを更新します。
~/test$ rsync -r src/ dest ~/test$ find -type f -exec stat -c'%n %y' {} \; ./src/x02 2016-08-07 16:45:54.126639402 +0900 ./src/x00 2016-08-07 16:45:54.126639402 +0900 ./src/x01 2016-08-07 16:45:54.126639402 +0900 ./dest/x02 2016-08-07 16:47:58.030637201 +0900 ./dest/x00 2016-08-07 16:47:58.030637201 +0900 ./dest/x01 2016-08-07 16:47:58.030637201 +0900 ~/test$
dest内のファイルは、rsyncを実行する度にタイムスタンプが更新されてしまいます。更新済ファイルを更新しないようにするには、–updateオプションをつけます(ショートオプションは-r)。
src/x00をtouchでファイルスタンプを更新して、rsync -ruするとどうなるか確認してみましょう。
~/test$ touch src/x00 ~/test$ find -type f -exec stat -c'%n %y' {} \; ./src/x02 2016-08-07 16:45:54.126639402 +0900 ./src/x00 2016-08-07 16:53:58.410630797 +0900 ./src/x01 2016-08-07 16:45:54.126639402 +0900 ./dest/x02 2016-08-07 16:47:58.030637201 +0900 ./dest/x00 2016-08-07 16:47:58.030637201 +0900 ./dest/x01 2016-08-07 16:47:58.030637201 +0900 ~/test$ rsync -ru src/ dest ~/test$ find -type f -exec stat -c'%n %y' {} \; ./src/x02 2016-08-07 16:45:54.126639402 +0900 ./src/x00 2016-08-07 16:53:58.410630797 +0900 ./src/x01 2016-08-07 16:45:54.126639402 +0900 ./dest/x02 2016-08-07 16:47:58.030637201 +0900 ./dest/x00 2016-08-07 16:54:13.546630528 +0900 ./dest/x01 2016-08-07 16:47:58.030637201 +0900 ~/test$
-uオプションにより、 dest側はx00のみ更新されました。ではsrc側のファイルが減った場合はどうなるでしょうか。
~/test$ rm src/x02 ~/test$ find -type f -exec stat -c'%n %y' {} \; ./src/x00 2016-08-07 16:53:58.410630797 +0900 ./src/x01 2016-08-07 16:45:54.126639402 +0900 ./dest/x02 2016-08-07 16:47:58.030637201 +0900 ./dest/x00 2016-08-07 16:54:13.546630528 +0900 ./dest/x01 2016-08-07 16:47:58.030637201 +0900 ~/test$ rsync -ru src/ dest ~/test$ find -type f -exec stat -c'%n %y' {} \; ./src/x00 2016-08-07 16:53:58.410630797 +0900 ./src/x01 2016-08-07 16:45:54.126639402 +0900 ./dest/x02 2016-08-07 16:47:58.030637201 +0900 ./dest/x00 2016-08-07 16:54:13.546630528 +0900 ./dest/x01 2016-08-07 16:47:58.030637201 +0900 ~/test$
src側のファイルが減っても、rsync後にdest側は変化ありませんでした。
src側のファイル削除に対応するには、–deleteオプションを指定します。
~/test$ rsync -ru --delete src/ dest ~/test$ find -type f -exec stat -c'%n %y' {} \; ./src/x00 2016-08-07 16:53:58.410630797 +0900 ./src/x01 2016-08-07 16:45:54.126639402 +0900 ./dest/x00 2016-08-07 16:54:13.546630528 +0900 ./dest/x01 2016-08-07 16:47:58.030637201 +0900 ~/test$
コメント