传输多个文件中断,shell脚本实现续传
2018-03-06 16:27
295 查看
背景:上篇博客记录了本人的需求shell脚本第一版本,但是传输过程中不知道什么原因中断了,3000+个数据文件只成功传输了1680个,但是又不能重新启动之前的脚本,会出现重复传输,也很耗时间。因此就想到从1681个开始传。
假设 /test/tmpcsv/下面有文件
……
c_1677.txt
c_1678.txt
c_1679.txt
……
c_1680.txt
c_1681.txt
c_1682.txt
c_1683.txt
……
需要传输的是c_1681.txt后面的所有数据文件
下面是shell脚本的实现
脚本名test.sh
注意点:shell脚本中对于空格很是敏感的,=左右是不可以有空格的,
${file#*/}:拿掉第一条 / 及其左边的字串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最後一条 / 及其左边的字串:my.file.txt
${file#*.}:拿掉第一个 . 及其左边的字串:file.txt
${file##*.}:拿掉最後一个 . 及其左边的字串:txt
# 是去掉左边
另外,由于本人是第一次写shell脚本,而且一下子操作的文件又是上千,所以很多显示在屏幕上的日志信息,也被一次又一次的刷新了,虽然我在第一版本的shell中,传输完成一个文件的时候进行了打印,但是很不凑巧的是,由于日志数量太多,打印出的文件信息彻底被冲完了。所以一开始也是很懵的,后来还是在odpsclient客户端的运行记录中查找到了。通过运行./odpscmd,并输入如下命令。
针对上述踩过的坑,因此我要把日志写入到一个文件中,方便报错查看。
新建一个写入日志信息的文件,log.txt
在启动脚本时,运行如下命令,
2>&1,表示标准错误重定向到标准输出,如果没有2>&1,只会有标准输出,没有错误;tee的作用同时输出到控制台和文件。
./test.sh 2>log.txt 表示只将错误写到文件,其它的还是在标准输出。
假设 /test/tmpcsv/下面有文件
……
c_1677.txt
c_1678.txt
c_1679.txt
……
c_1680.txt
c_1681.txt
c_1682.txt
c_1683.txt
……
需要传输的是c_1681.txt后面的所有数据文件
下面是shell脚本的实现
脚本名test.sh
for file in /test/tmpcsv/* do dir1=${file##*/} #拿掉最後一条 / 及其左边的字串,对于/test/tmpcsv/*这个路径, #只保留这个路径下的所有文件名 dir2=c_1680.txt #指定要对比的文件 if [ ${dir1} /> ${dir2} ] then ./odpscmd -e "tunnel upload $file 项目名.表名 -dbr true -mbr 100000 threads 10" echo "file "${file}" end" else echo "copleted upload" fi done echo "all file over"
注意点:shell脚本中对于空格很是敏感的,=左右是不可以有空格的,
if[ ${dir1} /> ${dir2} ]这句代码中的空格是必须要的,不然就会报错command not found
${file#*/}:拿掉第一条 / 及其左边的字串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最後一条 / 及其左边的字串:my.file.txt
${file#*.}:拿掉第一个 . 及其左边的字串:file.txt
${file##*.}:拿掉最後一个 . 及其左边的字串:txt
# 是去掉左边
另外,由于本人是第一次写shell脚本,而且一下子操作的文件又是上千,所以很多显示在屏幕上的日志信息,也被一次又一次的刷新了,虽然我在第一版本的shell中,传输完成一个文件的时候进行了打印,但是很不凑巧的是,由于日志数量太多,打印出的文件信息彻底被冲完了。所以一开始也是很懵的,后来还是在odpsclient客户端的运行记录中查找到了。通过运行./odpscmd,并输入如下命令。
tunnel show history -n 100;
针对上述踩过的坑,因此我要把日志写入到一个文件中,方便报错查看。
新建一个写入日志信息的文件,log.txt
在启动脚本时,运行如下命令,
./test.sh 2>&1 |tee log.txt
2>&1,表示标准错误重定向到标准输出,如果没有2>&1,只会有标准输出,没有错误;tee的作用同时输出到控制台和文件。
./test.sh 2>log.txt 表示只将错误写到文件,其它的还是在标准输出。
相关文章推荐
- shell脚本实现scp文件传输
- linux使用shell脚本实现自动登录scp传输文件到其他服务器
- shell脚本实现图片文件的重命名之修订版本~
- shell脚本实现查找目录下同名但不同后缀名的文件
- shell脚本从网络获取文件实现自动输入密码
- shell脚本实现的修改文件中的字符串(转)
- shell 脚本实现的遍历目录修改子目录及其文件权限
- shell 脚本实现统计文件夹下目录及文件个数
- shell脚本实现查找文件夹下重复的文件,并提供删除功能
- 在shell脚本中用expect 实现 scp 文件的时候不手动输入密码
- 使用lftp传输文件的shell脚本
- 在shell脚本中用expect 实现 scp 文件的时候不手动输入密码
- 使用inotify实现实时文件同步shell脚本
- shell脚本实现删除文件的源代码
- [Unix] shell脚本实现的修改文件中的字符串
- shell脚本中用expect实现远程scp文件
- 读取文件的每一行内容并输出 的shell脚本实现
- 用shell脚本实现删除一定大小的文件
- 使用shell脚本实现USB设备的加载与文件复制
- shell脚本实现图片文件的重命名