所以,我有一個看似簡單的問題,但到目前為止我還沒有找到解決方案:我想從 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)
只是偶然發現它,在這裡留下一條線索,以防它對某人(或將來的我)有幫助。