Rsync

rsync:如何排除最頂層的目錄

  • May 22, 2021

所以,我有一個看似簡單的問題,但到目前為止我還沒有找到解決方案:我想從 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。

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

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

如果您在最頂層目錄中有點文件,並且文件名以兩個點開頭,請在.[!.]*之後添加。*``..?*

似乎 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)

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

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