Bash

按日期同步文件

  • March 9, 2022

我有這個文件結構:

...folders/to/copy
...folders/to/mirror

我一直在做:

rsync --ignore-existing -raz --progress $source $destination

這可以很好地保持兩個文件夾樹上的所有內容都是最新的。但現在我只需要對超過 24 小時前更改的文件執行此操作。我嘗試過這樣的事情:

rsync -rav `find $source -mtime 1` $destination

問題是這會弄亂文件樹並且不能按我的需要工作。有一個更好的方法嗎?

我想備份文件結構,使用“文件夾”中的相對路徑及其中的所有內容,從一個地方到另一個地方,只留下超過 24 小時 ( mtime) 的文件。

您可以使用find | rsync過濾您有興趣複製的文件,像這樣

src=/source/folders/to/./copy
dst=/destination/mirrored/folders

find "$src/" -type f -mtime +0 -print0 |
   rsync --dry-run -a -iv --files-from - --from0 / "$dst"

--dry-run當您對結果集感到滿意時刪除。-iv如果您想要更安靜的操作,請移除。

我應該指出,/./源路徑的一部分定義了應該保留文件路徑的點。例如,如果您有一條路徑,/source/folders/to/./copy/sub/here.txt則相應的目的地將變為/destination/mirrored/folders/copy/sub/here.txt. 有關詳細資訊,請參閱文件中的--files-from--relative( -R) 選項。man rsync如果您的源路徑是相對的,那也可以。

該解決方案以 GNUfind或其他提供-print0. 如果您沒有該選項,您也可以刪除--from0,但最好替換-print0-exec printf '%s\0' {} +. 請參閱POSIX 替代 GNU find 的 -print0的討論。

引用自:https://unix.stackexchange.com/questions/693315