Bash
按日期同步文件
我有這個文件結構:
...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
如果您的源路徑是相對的,那也可以。該解決方案以 GNU
find
或其他提供-print0
. 如果您沒有該選項,您也可以刪除--from0
,但最好替換-print0
為-exec printf '%s\0' {} +
. 請參閱POSIX 替代 GNU find 的 -print0的討論。