使用Scp时防止覆盖文件

时间:2012-11-16 05:27:09

标签: linux scp

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

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

完成

对于scp是否有类似的选项,我查看了SCP的文档,似乎没有这样的选项。

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

添加信息:

操作系统:Ubuntu 12.04

7 个答案:

答案 0 :(得分:35)

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

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

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

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

答案 1 :(得分:15)

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

答案 2 :(得分:10)

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

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

答案 3 :(得分:0)

rsync over ssh它必须是。

答案 4 :(得分:0)

我过去曾经使用过rsync,但发现自己试图从带有CopSSH的窗口盒中抓取而没有rsync :-(以下对我来说效果很好,使用文件测试来消除文件覆盖,并向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解决方案!

答案 5 :(得分:0)

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

对于一个ascii / bin文件,您可以使用:

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

答案 6 :(得分:-1)

我没有测试它,但可能先通过sshfs进行测试,然后使用cp就可以了。