Rsync

rsync –no-perms 仍然保留權限並忽略 umask

  • July 31, 2020

我正在嘗試使用https://unix.stackexchange.com/a/315667/21372解決使用 rsync 的 cp 錯誤,但我無法讓它工作。本質上,我需要使用rsync類似於將rsync -a要執行的操作以遞歸方式複製文件或目錄,但創建具有正常 umask 條件的文件和目錄。但是在單個文件上嘗試這個表明它仍然保留目標文件的權限,即使我已經指定了--no-perms選項:

bash-4.1$ cd /tmp
bash-4.1$ touch afile
bash-4.1$ chmod a-w afile
bash-4.1$ ls -ld afile
-r--r--r-- 1 theuser thegroup 0 Jul 24 16:50 afile
bash-4.1$ rsync --copy-links --recursive --times --group --no-perms afile afile2
bash-4.1$ ls -ld afile*
-r--r--r-- 1 theuser thegroup 0 Jul 24 16:50 afile
-r--r--r-- 1 theuser thegroup 0 Jul 24 16:50 afile2
bash-4.1$ 

我想要的是擁有與正常創建afile2的權限相同的權限:afile3

bash-4.1$ touch afile3
bash-4.1$ ls -ld afile3
-rw-rw-r-- 1 theuser thegroup 0 Jul 24 16:51 afile3

我可以使用https://unix.stackexchange.com/a/315667/21372中給出的“苛刻”查找命令,但我寧願沒有後續查找命令的成本來執行我認為 rsync--no-perms選項應該執行的操作做。

這需要在使用者空間中工作(不需要root)。

這是 rsync 錯誤還是使用者錯誤?

涉及的作業系統和 rsync 版本是:

bash-4.1$ lsb_release -r -i
Distributor ID: RedHatEnterpriseWorkstation
Release:    6.8
bash-4.1$ rsync --version
rsync  version 3.0.6  protocol version 30
Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
   64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
   socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
   append, ACLs, xattrs, iconv, symtimes

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.
bash-4.1$ 

從 rsync 手冊頁:

要為新文件提供目標預設權限(同時保持現有文件不變),請確保關閉 –perms 選項並使用 –chmod=ugo=rwX (確保啟用所有非屏蔽位)。

所以…

rsync --copy-links --recursive --times --group --no-perms --chmod=ugo=rwX afile afile2

…應該使用您展示的範例文件來解決問題。

如果源文件具有權限,例如 777…

rsync --copy-links --recursive --times --group --no-perms --chmod=ugo=rw,-X afile afile2

… 將刪除可執行標誌。

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