*******************************************************************************************

版权所有: www.foutime.com  深圳市方泰智能科技有限公司   

通道锁 逃生锁 一卡通 楼宇对讲 停车场

*******************************************************************************************

   

    上传文件大多数用的是ftp,但是用ftp有一点不好,就是本地和远程的目录要对应,这样就要在多个目录下去切换,这样挺麻烦的,如果不注意的话,很有可能传错。所以想了个办法利用scp来批量上传文件或者目录。

一,scp上传不要输入密码

如果要用scp来上传文件,第一步就要去掉scp上传时要输入密码。要不然就没办法批量上传了。具体请参考:ssh 不用输入密码

二,ssh批量上传脚本

1,要上传的文件列表放到一个test文件中

  1. root@ubuntu:/home/zhangy# cat test

  2. /home/zhangy/test/aaa

  3. /home/zhangy/test/nginx.conf

  4.  

  5. /home/zhangy/test/test.sql

  6. /home/zhangy/test/pa.txt

  7. /home/zhangy/test/password

root@ubuntu:/home/zhangy# cat test
/home/zhangy/test/aaa
/home/zhangy/test/nginx.conf

/home/zhangy/test/test.sql
/home/zhangy/test/pa.txt
/home/zhangy/test/password

上面就要上传的文件。

2,批量上传的脚本

vim file_upload.sh

 
  
  1. #!/bin/sh    

  2. DATE=`date +%Y_%m_%d_%H`    

  3. if [ $1 ]    

  4. then    

  5.  for file in $(sed '/^$/d' $1)     //去掉空行  

  6.  do

  7.    if [ -f $file ]                 //普通文件  

  8.    then    

  9.      res=`scp $file $2:$file`      //上传文件  

  10.      if [ -z $res ]                //上传成功  

  11.      then    

  12.        echo $file >> ${DATE}_upload.log   //上传成功的日志  

  13.      fi    

  14.    elif [ -d $file ]              //目录  

  15.    then    

  16.      res=`scp -r $file $2:$file`    

  17.      if [ -z $res ]    

  18.      then    

  19.        echo $file >> ${DATE}_upload.log    

  20.      fi    

  21.    fi    

  22.  done    

  23. else

  24.  echo "no file" >> ${DATE}_error.log    

  25. fi  

#!/bin/sh

DATE=`date +%Y_%m_%d_%H`

if [ $1 ]
then
  for file in $(sed '/^$/d' $1)     //去掉空行
  do
    if [ -f $file ]                 //普通文件
    then
      res=`scp $file $2:$file`      //上传文件
      if [ -z $res ]                //上传成功
      then
        echo $file >> ${DATE}_upload.log   //上传成功的日志
      fi
    elif [ -d $file ]              //目录
    then
      res=`scp -r $file $2:$file`
      if [ -z $res ]
      then
        echo $file >> ${DATE}_upload.log
      fi
    fi
  done
else
  echo "no file" >> ${DATE}_error.log
fi

上传成功后,返回的是一个空行,上传不成功,什么都不返回

3,上传的格式

  1. ./file_upload.sh test 192.168.1.13

./file_upload.sh test 192.168.1.13

test是上传列表文件,192.168.1.13文件要传到的地方。