LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1427|回复: 7

求助:新人请教如何实现按指定顺序解压rar文件?

[复制链接]
发表于 2009-12-11 23:11:35 | 显示全部楼层 |阅读模式
我下载了65个rar文件,是分卷压缩的,而且文件名很不规则(例如98775a73-1832-4d3d-8641-a0a87737a38f.rar,0a9e0439-36c2-425a-905e-21a75ffb9e93.ra),没有办法直接解压,需要把文件名按照下载地址列表中的顺序更名后方可解压。我把下载地址列表存为order文件,并且把order文件和65个rar文件都放在同一个目录下。order文件共有65行,记录了下载顺序,前四行为:
http://bbsrrs1.joy.cn/1E57175879 ... 41-a0a87737a38f.rar
http://bbsrrs1.joy.cn/1E57175879 ... 5e-21a75ffb9e93.rar
http://bbsrrs1.joy.cn/1E57175879 ... 8b-61713c5c1417.rar
http://bbsrrs1.joy.cn/1E57175879 ... a6-449ef3814e3a.rar

现在希望写一个shell程序,使得能从order文件读入顺序,然后用mv按顺序进行更名,比如把第一个文件更名为1.rar,以此类推。最后就可以用unrar解压了。但是我不知道如何写才好,也不知道是否shell可以做到。请大家帮帮我吧,谢谢!
发表于 2009-12-12 01:05:32 | 显示全部楼层
65个文件,先ls -1 > rename.sh
然后手工编辑 rename.sh ,对照下载地址列表手工在前面加上 mv(用vim也可以
  1. :%s/^\(.*\)$/mv \1/g
复制代码
来完成) 和后面增加改名后的文件名的话,一个文件操作10秒也才十分钟出头,除非你对脚本非常熟练,否则不如手工编辑出一个改名脚本。或者由openoffice的电子表格帮你批量生成数字递增的文件名,再另存为.csv文本格式改名成脚本。
回复 支持 反对

使用道具 举报

发表于 2009-12-12 10:08:50 | 显示全部楼层
类似于这种吧。

#!/bin/sh
filelist=`ls ./`

for i in $filelist;

do
   mv $i "${i}.rar"
done
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-12 16:09:09 | 显示全部楼层
没办法,2,3楼的方法无法实现。目前只能在krename下面操作,速度还能接受吧!
回复 支持 反对

使用道具 举报

发表于 2009-12-12 17:43:47 | 显示全部楼层
  1. root [ ~/fnz ]0# cat order
  2. http://bbsrrs1.joy.cn/1E57175879EF70a87737a38f.rar
  3. http://bbsrrs1.joy.cn/1E57175879EF70a75ffb9e93.rar
  4. http://bbsrrs1.joy.cn/1E57175879EF70713c5c1417.rar
  5. http://bbsrrs1.joy.cn/1E57175879EF709ef3814e3a.rar
  6. root [ ~/fnz ]0# cat rr
  7. #!/bin/sh
  8. ln=`sed -n '$=' order`
  9. for (( i=1; i<=$ln; i++ ))
  10. do
  11.   theline=`sed -n "${i}p" order`
  12.   fn=`basename $theline`
  13.   echo mv $fn $i.rar
  14. done
  15. root [ ~/fnz ]0# ./rr
  16. mv 1E57175879EF70a87737a38f.rar 1.rar
  17. mv 1E57175879EF70a75ffb9e93.rar 2.rar
  18. mv 1E57175879EF70713c5c1417.rar 3.rar
  19. mv 1E57175879EF709ef3814e3a.rar 4.rar
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-12 20:23:52 | 显示全部楼层
Post by zhiyizhi;2055206
没办法,2,3楼的方法无法实现。目前只能在krename下面操作,速度还能接受吧!
非常感谢5楼,按照您的方法,我成功了,不过我稍微修改为

#!/bin/sh
ln=`sed -n '$=' order`
for (( i=1; i<=$ln; i++ ))
do
  theline=`sed -n "${i}p" order`
  fn=`basename $theline`
   mv $fn $i.rar
done
unrar x 1.rar

然后直接运行就可以了,shell的确是强大,可是要花时间来学习。不过有linuxsir,节约了时间哦!

再次感谢!
回复 支持 反对

使用道具 举报

发表于 2009-12-26 22:46:32 | 显示全部楼层
  1. n=0
  2. while read line ; do
  3.     [[ $n = [0-9] ]] && x=0$n || x=$n
  4.     curl "$line" > $x.rar
  5.     ((n++))
  6. done < order
  7. cat [0-9][0-9].rar > full.rar
  8. unrar full.rar
复制代码
回复 支持 反对

使用道具 举报

发表于 2009-12-31 13:08:37 | 显示全部楼层
  1. $ cat order |awk '{print "mv " $1 " file"NR}'|bash
复制代码


稍微该一下awk,加一个模式匹配,或者域分隔符就可以了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表