開発とライブのサブフォルダを含む2つの同じフォルダがあります。たとえば、次のようになります。
/development/subdirectory1
/development/subdirectory1/subsub1
/development/subdirectory2
/development/subdirectory2/subsub2
/development/subdirectory2/subsub2/subsubsub2
/live/subdirectory1
/live/subdirectory1/subsub1
/live/subdirectory2
/live/subdirectory2/subsub2
/live/subdirectory2/subsub2/subsubsub2
特定の開発フォルダの後に行われた最近のすべての作業をライブフォルダに同期したいと思います。
このために私は使用しています
find development/ -type f -newermt '2/2/2020 0:00:00' -exec rsync -avz {} live/ \;
ただし、ファイルが開発フォルダのサブフォルダにある場合でも、開発中のすべてのファイルがアクティブフォルダのルートにコピーされます。しかし、私が望むのは、ターゲットの正確なサブフォルダにあるファイルを再同期することです。
だから基本的に私が望むのは、「rsync -avz」を実行して特定の日付以降にファイルを更新することです。
また、解決策を見つけるために複数の解決策を試しましたが、見つかりませんでした。 --files-fromを試してください。これについて考えていますか?
答え1
コピーしたいファイルセットを1つrsync
。
find development/./ -type f -newermt '2/2/2020' |
rsync --dry-run -vtpR --files-from - . live/
.
find
宛先に保存するソースパスに表示されるパスの開始点。-z
ローカルにコピーしても圧縮は行われないため、フラグを省略しました。--dry-run
必要に応じて機能していることが満足であれば、削除してください。
ここでは実際にrsync
スマートな操作は行われません。tar
(または)を使用することもできますpax
。
tar cf - -C development --newer-mtime='2020-02-02' . | tar xvf - -C live