42

我正在使用 scp 复制一些文件,我不想覆盖已经存在的文件。

如果我使用 cp 命令,我认为这可以使用 cp -n 来完成。

scp 是否有类似的选项,我浏览了 SCP 的文档,似乎没有这样的选项。

rsync 或 sftp 是解决这个问题的方法吗?

添加信息:

操作系统:Ubuntu 12.04

4

7 回答 7

37

rsync似乎可以解决您的问题。这是我从这里得到的一个例子:

rsync -avz foo:src/bar /data/tmp

-a 选项将保留权限、目录结构、所有权和符号链接。您也可以单独指定任何这些选项。

-v 和 -z 分别表示详细和压缩。你并不真的需要它们,虽然 -z 如果你正在复制大文件很好。

于 2012-11-16T05:48:51.863 回答
18

我刚刚发现了一个简单的hack。将现有文件标记为只读。

于 2013-11-14T15:49:25.470 回答
15
rsync -avz --ignore-existing /source folder/* user@remoteserver:/dstfolder/

--ignore-existing不会覆盖远程服务器或目标服务器上的文件*。

于 2014-04-21T03:45:21.170 回答
0

我没有对其进行测试,但也许首先通过安装sshfs然后使用cp就可以了。

于 2013-07-31T21:09:15.003 回答
0

我过去为此使用过 rsync,但发现自己试图从带有 CopSSH 而没有 rsync 的 Windows 框中抓取 :-( 以下对我来说效果很好,使用文件测试来消除将被覆盖的文件,并且向 sftp 实例生成多个“获取”请求。

(  echo  'cd work/ftp/' ; 
   ssh <user>@<machine> 'cd work/ftp/ && ls -1 ITEM_SALE_SUMMARY_V.*.dat.xz' |
   while read line; do [[ -f "$line" ]] || echo get "$line"; done 
) | sftp  <user>@<machine>

以防万一其他人需要非 rsync 解决方案!

于 2013-08-09T00:25:33.663 回答
0

只是为了补充其他解决方案:

对于一个 ascii/bin 文件,你可以这样做:

cat source_file | ssh host "test ! -f target_file && cat > target_file"

于 2015-03-31T15:39:06.860 回答
-3

rsync over ssh它必须是。

于 2012-11-16T05:41:07.837 回答