原来图片都是在本地,往外导图片特别简单,只要执行一下cp的脚本就好了,但是现在图片都迁移到了七牛上,再往外导出图片就麻烦了
在七牛有一个qshell工具
里边有一个qdownload
qdownload | 从七牛空间同步数据到本地,支持只同步某些前缀的文件,支持增量同步 |
用的话呢qshell qdownload qdownload.conf 是这么用qdownload.conf 为配置文件
里边有这样一个配置 ,其他配置没有给出。
"prefix" : "", 填写图片的前缀
给我的文件时都是这样的,
cp /root/export_files/1025168/dfeafa0a-6f96-4b32-88c1-dde103b3655a/1453366970085.jpg /root/export_files/8155-003f-3115.jpg
一共2000多张......
我先把文件用一下命令截取
cat cp导出路径.txt | awk -F / ‘{print $4"/“$5}‘ > new_image.txt
得到这个格式
1025168/dfeafa0a-6f96-4b32-88c1-dde103b3655a,
那么配置文件的那行应该写成这样
"prefix" : "1025168/dfeafa0a-6f96-4b32-88c1-dde103b3655a",
然后我想每次执行完qshell qdownload qdownload.conf 然后自动修改prefix的路径,然后把路径改成下一个需要执行的路径,继续执行。
开始由于没有找到用”为分隔符进行分割的方法,所以就把配置文件写成了
"prefix" : “/1025168/dfeafa0a-6f96-4b32-88c1-dde103b3655a/",
以/为分隔符进行分割
cat qdownload.conf | grep prefix | awk -F ‘/‘ ‘{print "/"$2"/"$3"/"}‘
得到 /1025168/dfeafa0a-6f96-4b32-88c1-dde103b3655a/
测试命令:
path=/1051742/0f6faaa4-808c-4320-87a3-c95f0bdc20b5/
path1=`cat qdownload.conf | grep prefix | awk -F ‘/‘ ‘{print "/"$2"/"$3"/"}‘`
sed -i "s/$path1/$path/g" `grep prefix -rl qdownload.conf`
./qshell qdownload qdownload.conf
但是经过测试, /1051742/0f6faaa4-808c-4320-87a3-c95f0bdc20b5/ 这个格式不能再七牛上进行下载
1051742/0f6faaa4-808c-4320-87a3-c95f0bdc20b5才可以
然后又找到了以”为分割符进行分割的方法
修改后的测试命令:
path=1051742/0f6faaa4-808c-4320-87a3-c95f0bdc20b5
path1=`cat qdownload.conf | grep prefix | awk -F ‘"‘ ‘{print $4}‘`
sed -i "s/$path1/$path/g" `grep prefix -rl qdownload.conf`
./qshell qdownload qdownload.conf
测试后,第三句没有成功
想了想才发现sed -i "s/$path1/$path/g" `grep prefix -rl qdownload.conf`
这句中的‘/‘可能和变量中‘/‘有冲突,所以导致失败
又把这句修改为
sed -i “[email protected][email protected][email protected]" `grep prefix -rl qdownload.conf才可以
最终脚本
#!/bin/bash
while read path
do
path1=`cat qdownload.conf | grep prefix | awk -F ‘"‘ ‘{print $4}‘`
sed -i "[email protected][email protected][email protected]" `grep prefix -rl qdownload.conf`
./qshell/qshell qdownload download.conf
done<image.txt
脚本完成了,就这么两句,
可是在这个过程中走了很多弯路,想过另一种循环,但是(思路太傻)排除了。顺便也学习和复习了一些vi处理文本命令和sed命令
我觉得如果使用vi命令熟练的话,用vi处理文本,比用编辑软件,更方便。
总结的命令:
1、用newstring替换文件file.txt的oldstring
sed -i "s/oldstring/newstring/g" `grep oldstring -rl file.txt`
2、以"为分割符,截取每行的第四部分
cat file.txt | awk -F ‘"‘ ‘{print $4}‘
3、vi 处理文本
:%s/^/\// 行首加 /
:%s/$/\// 行尾加/
:%s/^\///g 行首减/
:%s/\/$//g 行尾减/
:%s/^\s*//g 行首减 空格
:g/^$/d 删除空行
:%s/oldstring/newstring/g 全部替换
:%s/oldstring/newstring/ 替换每行的第一个字符串