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。
我認為 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)
只是偶然發現它,在這裡留下一個線索,以防它幫助某人(或將來的我)。