Bash
在文件少於 24 小時的兩個文件夾之間遞歸同步文件
我想在一個目錄下找到 24 小時內的所有文件,然後將這些文件與另一台伺服器同步。
有一些舊文件我不想傳輸,但是如果這些舊文件被更新,我會這樣做。
我正在考慮編寫一個腳本:find 和 -ctime 參數並將該輸出重定向到一個文件,但我不知道如何讓 rsync 有效地使用它,或者是否有更好的方法來傳輸一組在過去 24 小時內更改的文件。
這個過程需要非常頻繁地執行,所以我不是在尋找效率太低的東西。(例如使用 ftp 並每次發送所有內容)。
任何想法表示讚賞。
嘗試這個:
cd /some/dir && rsync -av --files-from=<(find . -mtime 0 -printf "%p\n") <other stuff>
它使用Process Substitution
<( )
將find
命令替換為命名的 fifo,並將該 fifo 的名稱賦予rsync
讀取為要包含在同步中的內容。更新
鑑於凱爾的回答,這絕對
--files-from
比--include-from
;更合適。雖然兩者都會起作用。答案已更新
#!/bin/sh thefiles=/tmp/files.$$ LOCALDIR=/path/to/local/dir REMOTEDIR=/path/to/remote/dir REMOTEHOST=remote.host changetime=24h cd $LOCALDIR || { echo cd failed 1>&2; exit 1; } trap 'rm -f $thefiles' 0 find . -type f -ctime -$changetime -print > $thefiles rsync -v -n --archive --files-from=$thefiles . $REMOTEHOST:$REMOTEDIR
此腳本執行查找 $ LOCALDIR, dumping the results into a file, then tells rsync to use the file contents as a list of files to transfer to the directory $ 主機上的 REMOTEDIR $ REMOTEHOST. The script chdir’s into $ LOCALDIR 因為 rsync 命令需要相對路徑,而不是絕對路徑。我將 -v -n 留在了 rsync 參數中,這樣您就可以在不複製任何內容的情況下看到它的作用;當您對腳本執行您想要的操作感到滿意時,請刪除 -n。