我正在设置rsync
将文件从 ServerA 传输到 ServerB,并且需要保留时间戳和权限。他们在这里的关键是文件由与执行文件传输的帐户不同的帐户拥有。
rsync
使用以下示例传输文件:
rsync -a /colorschemes/ acoder@bu.my.box.net:/colorschemes/ --delete
Run Code Online (Sandbox Code Playgroud)
该-a
标志产生以下类型的错误:
rsync: failed to set times on "/colorschemes/946/ex": Operation not permitted (1)
rsync: failed to set permissions on "/colorschemes/946/ex/blue.pdf": Operation not permitted (1)
Run Code Online (Sandbox Code Playgroud)
在远程系统上,当尝试手动设置文件权限时,acoder 帐户有类似的错误:
[acoder@bu ~]$ chown apache:codingteam /colorschemes/946
chown: changing ownership of ‘/colorschemes/946’: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
不过,这可以正常工作:
[acoder@bu ~]$ sudo chown apache:codingteam /colorschemes/946
Run Code Online (Sandbox Code Playgroud)
有没有办法让远程 rsync 使用 sudo?
我使用 rsync 备份了我的整个主目录,并将备份移动到新安装的 Linux。不知何故,我的文件权限完全搞砸了(所有文件都归用户“999”所有,文件权限设置为777
)。
我跑了快sudo chown -R username:username ~/
它固定我与我的声音有一些问题,但现在我所有的纯文本文件(甚至是电影和音乐)被标记为可执行文件,其他用户可以查看我的文件等。
如何将我的文件权限恢复到“正常”状态?从备份恢复是不可能的,因为备份也搞砸了权限。我总是可以重新安装我的操作系统并从备份中清除配置文件,只留下个人文档,然后我可以递归地为其设置权限,但是我应该将权限设置为什么?一个sudo chmod -R 660 ~/Music
如让我不能听我的音乐,即使我的主人。
由于我经常通过网络将不同数量的特定文件复制到(相当复杂的)目标目录中,如果我可以使用cp
's-t
标志,我的生活会容易得多:有了它,您可以指定目标目录“在开始”——而不是作为最后的论点。
这样,我可以CTRL-R
先复制命令,然后再CTRL-W
复制以前复制的文件,而不管之前有多少文件,始终保留(复杂的)设置和目标目标系统和目录。
但是我找不到任何合适的标志,无论是 forscp
还是 for rsync
。(如果其中一个提供此选项,我会使用其中之一。)
做scp
或rsync
提供类似的东西cp -t
?
在绝望中,我什至玩弄了bash
的历史控制,尤其是参数提取机制:不幸的是,似乎不可能以“第x个参数到最后一个参数”的形式指定范围。but-one”,这是我需要的,因为我并不总是有参数的数量(除非我计算......)。
从联机帮助页rsync
Run Code Online (Sandbox Code Playgroud)-u, --update
这会强制 rsync 跳过目标上存在且修改时间比源文件更新的任何文件。(如果现有目标文件的修改时间等于源文件的修改时间,并且大小不同,则它将被更新。)请注意,这不会影响目录、符号链接或其他特殊文件的复制。此外,发送者和接收者之间的文件格式差异始终被认为对于更新来说足够重要,无论对象上的日期是什么。换句话说,如果源有一个目录,而目标有一个文件,则无论时间戳如何,传输都会发生。此选项是传输规则,而不是排除,因此它不会影响进入文件列表的数据,因此不会影响删除。它只是限制接收者请求传输的文件。
没有-u
,
Rsync 使用“快速检查”算法(默认情况下)查找需要传输的文件,该算法查找大小或上次修改时间已更改的文件。当快速检查表明文件的数据不需要更新时,将直接在目标文件上对其他保留的属性(根据选项的请求)进行任何更改。
您能指出使用-u
和不使用之间有什么区别吗?
是否-u
决定要传输的文件比没有传输的文件少-u
,因此传输时间是否-u
比没有传输的时间更长-u
?
谢谢。
我使用以下命令将一个目录的内容完整、递归地复制到另一个目录中:
rsync -avzhe /path1/to1/dir1/* /path2/to2/dir2/
它按照我的预期工作,除了第一个文件(按字母顺序排列),无论是目录还是文件,都不会被复制。所有其他文件都会被复制。为什么 ?
如果重要的话,我的操作系统是 MacOS 10.14.6。
我有以下文本文件
...
/a/b/c/f1
/a/b/c/f2
...
/a/b/c/d1
...
Run Code Online (Sandbox Code Playgroud)
其中f1
和f2
是文件,而d1
是目录。我想将确切的层次结构复制到我的目标文件夹 ( /z
) 中。
使用 bash,对于lr
从文本文件读取的每一行,我的脚本都会运行(为了简单起见,我省略了这些选项)
rsync $lr/ /z/$lr
该文件夹被正确复制,因为我获得了/z/a/b/c/d1
. 不幸的是,对于文件结果
/z/a/b/c/f1/f1
/z/a/b/c/f2/f2
Run Code Online (Sandbox Code Playgroud)
rsync
如何对文件和目录使用上述相同的调用来解决这个问题?