如果我失去对某些数据目录的访问权限,rsync 会覆盖我当前拥有的文件吗?
rsync -amHAXxzvR --update --numeric-ids --progress --include='*/' --include=*.sas7bdat --exclude='*.old/' --exclude=* -e [email protected]:/XXX/ /mnt/z/XXX/.
我对数据的权限可能每年左右都会发生变化,具体取决于机构对数据库的访问权限。例如,对于某些文件,如果我无权访问,我会收到以下错误:无法打开“XXXX”:权限被拒绝 (13)
那么,如果我运行上述命令,rsync 是否会覆盖并销毁我已经下载但失去访问权限的当前文件?
如果是这样,我该如何避免呢?谢谢。
答案1
您尚未指定--delete
,因此不会从目标中删除任何文件。您可以自己轻松测试权限。
设想
mkdir -p 739797/src 739797/dst
cd 739797
echo first try | tee src/file1 >src/file2 # Create two files
rsync -av src/ dst/ # Copy everything
使用ls -l
你可以看到dst/
现在包含相同的内容src/
echo second attempt | tee src/file1 >src/file2 # Update the two files
chmod u= src/file2 # Remove permission from file2
rsync -av src/ dst/ # Attempt to copy everything
您会看到rsync
失败,权限被拒绝file2
。使用ls -l dst
可以看到file1
已经更新但file2
还没有。此外,还file
没有(正确地)更新:
-rw-r--r-- 1 roaima roaima 15 Mar 15 13:09 file1
-rw-r--r-- 1 roaima roaima 10 Mar 15 13:04 file2
额外说明
- 如果您正在备份数据库或任何其他文件,请
rsync
记住它在复制时不会锁定其源文件,并且复制不是即时的。如果源文件在rsync
复制时发生更改,则最终可能会在目标文件中出现未检测到的损坏。备份快照或闲置副本 - 始终引用 和 的通配符模式
--include
,--exclude
以便 shell 不会尝试将它们与文件系统中的文件和目录进行匹配。而不是--exclude=*
写--exclude='*'