Rsync
rsync –no-perms 仍然保留權限並忽略 umask
我正在嘗試使用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
… 將刪除可執行標誌。