Bash

在文件少於 24 小時的兩個文件夾之間遞歸同步文件

  • January 30, 2012

我想在一個目錄下找到 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。

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