rsync:如何排除最頂層目錄

rsync:如何排除最頂層目錄

所以,我有一個看似簡單的問題,但到目前為止我還沒有找到解決方案:我想從 rsync 中排除最頂層的目錄,同時仍然同步其所有子目錄。特殊的問題是我無權修改最頂層目錄的時間,但希望所有子目錄都有正確同步的時間。

我使用的rsync指令如下:

rsync --exclude ./ -rlptDu ./ server.example.com:/usr/local/directory/

看起來server.example.com:/usr/local/directory/像這樣:

drwxrws---  5 root   staff 24576 Jul  9 15:00 .

(我的本地用戶是 的成員staff

當我執行 rsync 時,出現以下錯誤:

rsync: failed to set times on "/usr/local/directory/.": Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1070) [sender=3.0.9]
make: *** [pub_to_mel_internal] Error 23

本機上的版本是 3.0.9,遠端電腦上的版本是 3.0.7,兩台都運行 Debian。

答案1

我認為rsync的過濾規則無法匹配頂級目錄,所以它總是同步的。解決方法是同步此目錄內的所有檔案而不是目錄本身。

rsync -rlptDu -- * server.example.com:/usr/local/directory/

如果最頂層目錄中有點文件,且文件名以兩個點開頭,請.[!.]*在後面新增。*..?*

答案2

看來 rsync 可以使用以下指令排除最頂層的目錄--files-from

$ rsync -anv from/ to/
sending incremental file list
./
a
b.test

sent 97 bytes  received 25 bytes  244.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)
$ printf '%s\n' 'a' 'b.test' | rsync -anv --files-from=- from/ to/
building file list ... done
a
b.test

sent 88 bytes  received 22 bytes  220.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

只是偶然發現它,在這裡留下一條線索,以防它對某人(或將來的我)有幫助。

相關內容