可以使用git,但有更好的方法是使用scp,记录一下。
一、上传文件到Linux服务器
命令如下:
scp filename username@ip_address:directory_name |
例如:
scp -r D:\\Blog\\myblog\\source\\1.png root@106.15.3.183:/data/www/文件备份/hexo博客备份 |
二、上传文件夹到Linux服务器
命令如下:
scp -r dir_name username@ip_address:directory_name |
例如:
scp -r D:\\Blog\\myblog\\source root@106.15.3.183:/data/www/文件备份/hexo博客备份 |
三、预先远程删除Linux中的该文件夹
对于同名文件,scp命令会进行覆盖,这个特性非常好。但如果新文件改名了,上传上去的时候想删除旧文件,就得用新的处理方式了,最直接的办法就是预先删除该文件夹。另外要远程删除,最好和scp命令连续执行。
这个操作包含三个动作:
- 登入远程服务器:使用
ssh name@ip
命令 - 删除服务器的对应文件夹:使用
rm -rf folder
命令 - 退出服务器,返回客户端的shell窗口:使用
exit
命令
现在要让这三个动作组合起来放到SCP命令的前一行,保证执行SCP命令时处在客户端的shell窗口。方法是把后两个命令组合,同时用;
分隔。
ssh -t root@106.15.3.183 'rm -rf /data/www/文件备份/hexo博客备份/source ; exit' |
总的bat
/sh
脚本即为:
ssh -t root@106.15.3.183 'rm -rf /data/www/文件备份/hexo博客备份/source ; exit' |
四、SCP免密码传输文件
使用scp传输文件时,是要求输入服务器密码的。如果经常传输,频繁的密码输入会很麻烦,可以预先放置密钥文件来避免重复的密码验证。方法如下。
首先在本机生成密钥:
ssh-keygen -t rsa |
然后将密钥目录下的id_rsa.pub
上传到服务器的/root/.ssh/
目录中。注意,centos系统里root
目录下是没有.ssh
文件夹的,需要预先创建;如果有,就忽略这一步。(有些系统有个/etc/ssh
目录,不用管)
mkdir /root/.ssh |
然后上传密钥文件,并更名为authorized_keys
。
scp -r C:\\Users\\HSY\\.ssh\\id_rsa.pub root@106.15.3.183:/root/.ssh/authorized_keys |
至此,再上传个人文件时,就不需要密码验证了。
如果无效,尝试给authorized_keys
文件添加权限,设置为 600 或者 644。
chmod 600 /root/.ssh/authorized_keys |
五、上传时排除指定文件或文件夹
scp命令不支持,考虑使用rsync命令
rsync av -e ssh --exclude='*.out' /path/to/source/ user@hostB:/path/to/dest/ |
这里:
-a :递归到目录,即复制所有文件和子目录。另外,打开归档模式和所有其他选项(相当于 -rlptgoD)
-v :详细输出
-e ssh :使用 ssh 作为远程shell,这样所有的东西都被加密
—exclude=’.out’ :排除匹配模式的文件,例如`’.out’`表示排除所有out后缀的文件。
如果想排除文件或文件夹,可写作:
'file.txt'
,'dir'
。如果要排除目录内容,但不排除目录本身,请使用dir/*
而不是dir
。要排除多个文件或目录,只需指定多个
--exclude
选项。如果您想使用单个--exclude
选项,则可以用大括号{}
列出要排除的文件和目录并用逗号分隔。rsync -a --exclude 'file.txt' --exclude 'dir1/*' --exclude 'dir2' src_directory/ dst_directory/
rsync -a --exclude={'file.txt','dir1/*','dir2'} src_directory/ dst_directory/如果要排除的文件或目录数量很大,则可以在一个文件中列出要排除的文件与目录,然后将文件传递给
--exclude-from
选项。rsync -a --exclude-from='exclude-file.txt' src_directory/ dst_directory/
exclude-file.txt内容:
file1.txt
dir1/*
dir2借助rsync,您还可以根据与文件或目录名称匹配的模式排除文件与目录。例如参数
--exclude '*.*jpg'
排除所有.jpg
文件。rsync -a --exclude '*.jpg*' src_directory/ dst_directory/