如何从 Linux 中的命令行仅将文件复制到另一台服务器上尚不存在于该文件夹中的远程文件夹?

如何从 Linux 中的命令行仅将文件复制到另一台服务器上尚不存在于该文件夹中的远程文件夹?

我在两个不同的服务器上有两个文件夹。

我想在 A 和 B 之间同步文件,但是,我只想复制文件夹 B 中尚不存在的文件,因为这些文件很大。我不关心更新文件。我只想要文件夹 B 中每个文件的副本。

我如何在 Linux 上执行此操作? (我想知道如何更新也已更改的文件会很高兴)

答案1

rsync 能够做到这一点。

rsync --ignore-existing <src> <dest>

您还可以执行各种更新。只需查看手册页即可。

答案2

使用rsync, 并指定--ignore-existing您是否不想更新现有文件:

rsync -e ssh -av --ignore-existing /my/source/directory [email protected]:/data/

我通常添加的一个流行的附加选项是--progress让您了解发生了什么。如果您期望中断,也可以说--partial,但如果您在传输过程中确实被切断,我不确定“部分”和“忽略现有”如何混合。

答案3

这是几乎可以做到这一点的技巧,但此技巧仅在复制到同一服务器上的文件夹时才有效。以下是所包含链接中的相关内容。

[jonesy@cranford testing]$ ls
bar  foo

[jonesy@cranford testing]$ ls foo
1  2  3

[jonesy@cranford testing]$ ls bar
1  2  3  4  5  6

[jonesy@cranford testing]$ yes n | cp -i bar/* foo 2>/dev/null

[jonesy@cranford testing]$ ls foo
1  2  3  4  5  6

[jonesy@cranford testing]$ ls bar
1  2  3  4  5  6

“我正在向“cp -i”命令传递一个常量“no”,该命令询问您是否要覆盖(或不覆盖)目标目录中已存在的任何文件。您不必将 STDERR 发送到/dev/null — 如果不这样做,最终结果是复制命令只会将文件复制到目标目录(如果它们尚不存在),它将跳过两个目录中都存在的文件。 (嗯,从技术上来说复制命令不会,但当你这样做时操作会)。”

“当然,我可以强行覆盖目录内容,但我不知道两个目录中存在的文件是否相同。或者我可以将一个横向移动,另一个移动到位,但存在同样的问题。”

相关内容