防止在使用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
将做的伎俩。