Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何使用变量(比如$path)定义的路径从一台服务器同步到另一台服务器?_Bash_Variables_Copy_Rsync - Fatal编程技术网

Bash 如何使用变量(比如$path)定义的路径从一台服务器同步到另一台服务器?

Bash 如何使用变量(比如$path)定义的路径从一台服务器同步到另一台服务器?,bash,variables,copy,rsync,Bash,Variables,Copy,Rsync,您好,我想使用rsync将数据从一台服务器复制到另一台服务器,但复制数据的路径存储在从数据库获取的变量中。在不知道实际rsync调用的情况下,有点难以理解发生了什么。OTOH,“使其仅复制更新的文件”取决于您所说的“更新”的含义。从手册页: -c、 --校验和 这改变了rsync检查文件是否已被删除的方式 已更改,需要转移。 如果没有此选项,rsync将使用 (默认情况下)检查的“快速检查” 如果每个文件的大小和上次 发送方之间的修改匹配 和接受者。此选项将更改此设置 比较每种类型的128位校验

您好,我想使用rsync将数据从一台服务器复制到另一台服务器,但复制数据的路径存储在从数据库获取的变量中。

在不知道实际rsync调用的情况下,有点难以理解发生了什么。OTOH,“使其仅复制更新的文件”取决于您所说的“更新”的含义。从手册页:

-c、 --校验和

这改变了rsync检查文件是否已被删除的方式 已更改,需要转移。 如果没有此选项,rsync将使用 (默认情况下)检查的“快速检查” 如果每个文件的大小和上次 发送方之间的修改匹配 和接受者。此选项将更改此设置 比较每种类型的128位校验和 具有匹配大小的文件。 生成校验和意味着 双方都将花费大量磁盘 I/O读取文件中的所有数据 在传输中(这是在 任何要做的阅读 传输已更改的文件),以便 大大降低了速度


我认为您需要阅读rsync的手册页,以及它对尾部斜杠的说明:

源上的尾随斜杠会更改此行为,以避免在目标上创建额外的目录级别。您可以将源上的尾随/理解为“复制此目录的内容”,而不是“按名称复制目录”,但在这两种情况下,包含目录的属性都会传输到目标上的包含目录。换句话说,以下每个命令都以相同的方式复制文件,包括它们对/dest/foo属性的设置:


这是因为您将目录视为一个文件

设置

mkdir foo
touch foo/a
mkdir /tmp/foo
问题

rsync -av foo /tmp/foo
解决方案

rsync -av foo/ /tmp/foo  # Notice foo has a trailing '/'
rsync -av foo/. /tmp/foo # Another way to do the same thing

不要在程序中使用
$PATH
作为变量;称之为其他名称。添加到
Amber
备注<代码>路径已被使用,它包含要在其中搜索可执行文件的目录列表。重写它是危险的。我只需更改
rsync--progress--stats-aHrvxz“$SECONDARY:$d/”$d
rsync -av foo/ /tmp/foo  # Notice foo has a trailing '/'
rsync -av foo/. /tmp/foo # Another way to do the same thing