scp复制方向:什么是源,什么是目标?

scp复制方向:什么是源,什么是目标?

scp 的 man 简介是:

scp [-1246BCpqrv] [-c 密码] [-F ssh_config] [-i 身份文件] [-l 限制] [-o ssh_option] [-P 端口] [-S 程序] [[user@]host1:]file1 。 .. [[用户@]主机2:]文件2

什么是源,什么是目标?我总是想知道复制发生在哪个方向。它是如何定义的?

答案1

Unix 命令几乎总是(带有非常少数例外)源在目标之前。如果有意义的话,大多数都允许在最终目标之前使用多个来源。

包括scp

某些命令(例如 GNU 版本的cpmv)有一个选项(例如-t--target-directory=DIRECTORY),允许您将目标放在第一位 -但默认是标准的“源在目标之前”。这非常有用,因此您可以在使用类似 之类的东西时将目标放在源之前find ... -exec cp -t target/ {} +,或者这样您就可以避免使用-I {}with xargs(这要慢得多,它会导致xargs每个参数分叉一个命令,而不是在每个参数上容纳尽可能多的命令命令行),例如... | xargs -0r mv -t target/代替... | xargs -0r -I {} mv {} target/

如果没有如上所述的显式覆盖选项,“目标在源之前”几乎是闻所未闻的 - 如此罕见,以至于您完全有权思考“嗯?WTF?”如果你遇到过。


如果您需要scp同时将多个文件传输到多台计算机,请在 for 循环中执行此操作,如下所示:

for h in host1 host2 host3... ; do
  scp file1 file2 file3... "user@$h:/path/"
done

或者使用pdcp 来自并行分布式 Shellpdsh为大多数 Linux 发行版打包。

例如

pdcp -w host1,host2,host3 file1 file2 file3 /path/to/target/

这是一个非常简单的示例,有一个配置文件,您可以使用它来定义具有任意组名称(例如、、、或其他名称)pdsh的主机和主机组。然后您可以在或命令中使用它们:allwebserversdbserversgpunodespdshpdcp

pdsh -g all 'uname -a ; uptime'
pdcp -g webservers index.html /var/www/

与上面的循环不同for,它不会运行命令或按顺序复制文件,一次一台主机。它并行运行多个命令,并根据计算机拥有的 CPU 核心数量进行合理的限制。

答案2

通过该scp命令,您可以指定来源(要复制的文件或目录)和目标(复制文件或目录的位置)。的语法scp是:

如果您正在使用要将文件发送到远程计算机的计算机:

scp /file/to/send username@remote:/where/to/put

这里remote可以是 FQDN 或 IP 地址。

另一方面,如果您在计算机上想要从远程计算机接收文件:

scp username@remote:/file/to/send /where/to/put

答案3

你可以从部分推断出来...

您可以复制多个源文件,但只能复制到一个目标。这...意味着您可以在此位置指定其他文件。由于 是...在 后直接给出的file1,因此这一定是来源。

示例:scp fileA fileB fileCfileA和复制fileBfileC

相关内容