可以使用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命令连续执行。


这个操作包含三个动作:

  1. 登入远程服务器:使用ssh name@ip命令
  2. 删除服务器的对应文件夹:使用rm -rf folder命令
  3. 退出服务器,返回客户端的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 -r D:\\Blog\\myblog\\source root@106.15.3.183:/data/www/文件备份/hexo博客备份


参考:如何SSH到Linux服务器里的特定目录并执行命令?| 良许Liunx教程网 (lxlinux.net)




四、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


参考:Linux下用SCP无需输入密码传输文件 | 51CTO博客




五、上传时排除指定文件或文件夹

rsync 排除文件和目录 | myfreax

scp命令不支持,考虑使用rsync命令

rsync av -e ssh --exclude='*.out' /path/to/source/ user@hostB:/path/to/dest/

这里:

  1. -a :递归到目录,即复制所有文件和子目录。另外,打开归档模式和所有其他选项(相当于 -rlptgoD)

  2. -v :详细输出

  3. -e ssh :使用 ssh 作为远程shell,这样所有的东西都被加密

  4. —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/