防止在使用Scp时覆盖文件

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

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

对于scp有没有类似的select,我经历了SCP的文档,似乎没有这样的select。

是rsync或sftp的方式去解决这个问题?

加法信息:

操作系统:Ubuntu 12.04

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

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

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

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

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

 rsync -avz --ignore-existing /source folder/* user@remoteserver:/dstfolder/ 

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

rsync通过SSH它必须是。

我过去使用过rsync,但是发现自己试图从一个带有CopSSH的窗口框中抓取并且没有rsync :-(下面的工作对我来说很好,使用文件testing来消除将被覆盖的文件,向sftp实例发送多个'get'请求。

 ( 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解决scheme!

只是为了补充其他解决scheme:

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

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

我没有testing它,但也许首先通过sshfs挂载,然后使用cp将做的伎俩。