scp:不要覆盖Linux或者Unix系统上的现有文件

时间:2020-01-09 10:46:03  来源:igfitidea点击:

我使用scp将文件上传到网络存储提供的CDN公司。
我不想覆盖现有文件。
在Linux,Mac OS X或者Unix等操作系统上使用scp命令时,如何防止文件覆盖?
简短答案不可能。

长答案

如果所有者拥有写权限,scp命令将始终覆盖已经存在的文件。
我建议您使用rsync命令。
语法是

rsync --ignore-existing file1 user@server1:/dest/
rsync --ignore-existing file.to.upload [email protected]:/path/to/dest/
### add ssh, just in case ;) ###
rsync -e ssh --ignore-existing file.to.upload [email protected]:/path/to/dest/
rsync -avP --ignore-existing *.png [email protected]:/stoage/static/c/theitroad.local/images/
rsync --ignore-existing file1 /path/to/dest/

" --ignore-existing"选项会跳过更新接收器上存在的文件,例如server1.theitroad.local。

Shell脚本示例

以下脚本将使用rsync命令将文件从您的计算机上载到远程服务器。
首先,请确保您设置了公共密钥身份验证:

#!/bin/bash
# Purpose: Batch file uploader from my desktop to the remote server
# Author: theitroad <www.theitroad.local> under GPL v2.x+
# ----------------------------------------------------------------
_server="server1.theitroad.local"
_user="theitroad"
 
## static url mapping ##
_cdnbase="http://static.theitroad.org/images"
 
_dest="/var/www/images/"
_cdnurls=""
_isuploaded=0
_files="$@"
## rsync args ##
_args="-aPv --ignore-existing"
## fail safe ##
[[ "$_files" == "" ]] && { echo "Usage: 
./script foo.png
./script foo.png bar.png
./script *.mov
./script test.gif
file1.png file2.png"; exit 0; }   ## Let us start uploading files. Bash for loop allows us to do a few more additional things, ## but I am keeping it simple here for demo purpose for i in $_files do # make sure $i file exist # if [ -f "$i" ] then rsync "$_args" "$i" ${_user}@${_server}:${_dest} _cdnurls="${_cdnurls}\n${_cdnbase}/${i##*/}" _isuploaded=1 else echo "Error $i file not found." fi done   if [ $_isuploaded -eq 1 ] then echo "CDN urls:" echo -e "$_cdnurls" echo fi

您可以如下使用脚本:

sending incremental file list
test-image.gif
         950 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)
 
sent 1053 bytes  received 31 bytes  197.09 bytes/sec
total size is 950  speedup is 0.88
CDN urls:
 
http://static.theitroad.org/images/test-image.gif

输出示例:

./script test.gif

再次运行:

sending incremental file list
 
sent 60 bytes  received 12 bytes  13.09 bytes/sec
total size is 950  speedup is 13.19
CDN urls:
 
http://static.theitroad.org/images/test-image.gif

输出示例:

##代码##