如何使用“scp”命令仅复制新文件?

B F*_*ley 35 scp

我正在使用出现错误scp命令将数百个文件复制到另一台计算机。现在我要再次复制文件。有没有办法避免复制已经复制的文件?stalled

小智 59

你可以用rsync它。rsync确实是为这种类型的操作而设计的。

句法:

rsync -avh /source/path/ host:/destination/path
Run Code Online (Sandbox Code Playgroud)

或者

rsync -a --ignore-existing /local/directory/ host:/remote/directory/
Run Code Online (Sandbox Code Playgroud)

当您第一次运行它时,它会复制所有内容,然后只会复制新文件。

如果您需要通过 SSH 连接隧道传输流量(例如,出于保密目的),正如您最初要求基于 SCP 的解决方案所指出的那样,只需将-e ssh参数添加到rsync. 例如:

rsync -avh -e ssh /source/path/ host:/destination/path
Run Code Online (Sandbox Code Playgroud)

  • 我通常使用`rsync -avuz /source/path/host:/destination/path`。这在一个命令中完成了整个工作,并且在后续调用中,只传输需要它的文件。 (2认同)

小智 8

如果您出于任何原因想坚持使用 scp,您可能会删除对本地数据的w权限(如果您有权这样做)并且 scp 不会触及它。更准确地说:

  1. chmod a-w local/*.tar.gz (在您的本地目录中)
  2. scp remote/*.tar.gz local

这不是很有效,很好,但如果您需要一个快速的临时解决方案而无需更改为 scp 以外的其他内容,则可能会有所帮助。(荣誉:scp 没有替换目标中的现有文件


小智 6

没有关于如何用 SCP 做到这一点的确切答案,因为这是最初的问题所问的。

sudo find /files/ -type f -exec chmod a-w {} \;

scp -r username@server.com:/file/location/* /files

完成复制文件后,将权限更改回:

sudo chmod a+w -R /files