« Normal Guy\'s Life | 首页 | 用perl解两个BAIDU试题。 »

用perl按目录名批量更改文件名

提供测试文件目录结构以及perl脚本打包下载。
http://www.vetcafe.net/blog/up/1132403634.gz
下载后扩展名更改为tar.gz解压缩。

需求:
原来目录里的格式为:

Code:

[root@centos chmov]# ls -R
.:
电影  电视

./电影:
动作  爱情

./电影/动作:
方大玉  黄飞鸿

./电影/动作/方大玉:
1.rmvb  2.rmvb

./电影/动作/黄飞鸿:
1.rmvb  2.rmvb

./电影/爱情:
纯真年代  薰衣草

./电影/爱情/纯真年代:
1.rmvb  2.rmvb

./电影/爱情/薰衣草:
1.avi  2.avi

./电视:
中国  韩国

./电视/中国:
大宅门  红楼梦

./电视/中国/大宅门:
1.wmv  2.wmv  3.wmv

./电视/中国/红楼梦:
1.avi  2.avi  3.avi

./电视/韩国:
浪漫漫屋

./电视/韩国/浪漫漫屋:
1.rmvb  2.rmvb  3.rmvb


现在要根据目录名吧 1.rmvb 2.wmv这样文件改成路径名加上原来的文件名如:
电影_爱情_纯真年代1.rmvb
电视_中国_大宅门2.wmv
让每个文件拥有完全的信息,方便在emule里被索引。

解决问题的perl脚本:
Code:

[root@centos chmov]# cat chmov.pl
#!/usr/bin/perl
####################################################
#### sleetdrop@gmail.com
#### change the files name from it's original
#### name to pathname plus it's original name.
#### put this script in the beginning dir and run
####################################################


@paths=();
sub chmovname{
       for $file (glob "*"){
               if(-d $file){
                       push @paths, $file;
                       chdir $file;
                       &chmovname;
                }
               if(-f $file){
                       $newfile=join "_", @paths;
                       $newfile.=$file;
                       rename $file, $newfile;
                }
        }
       chdir "../";
       pop @paths;
}
&chmovname;



执行结果:
Code:

[root@centos chmov]# ./chmov.pl
[root@centos chmov]# ls -R
.:
chmov.pl  电影  电视

./电影:
动作  爱情

./电影/动作:
方大玉  黄飞鸿

./电影/动作/方大玉:
电影_动作_方大玉1.rmvb  电影_动作_方大玉2.rmvb

./电影/动作/黄飞鸿:
电影_动作_黄飞鸿1.rmvb  电影_动作_黄飞鸿2.rmvb

./电影/爱情:
纯真年代  薰衣草

./电影/爱情/纯真年代:
电影_爱情_纯真年代1.rmvb  电影_爱情_纯真年代2.rmvb

./电影/爱情/薰衣草:
电影_爱情_薰衣草1.avi  电影_爱情_薰衣草2.avi

./电视:
中国  韩国

./电视/中国:
大宅门  红楼梦

./电视/中国/大宅门:
电视_中国_大宅门1.wmv  电视_中国_大宅门2.wmv  电视_中国_大宅门3.wmv

./电视/中国/红楼梦:
电视_中国_红楼梦1.avi  电视_中国_红楼梦2.avi  电视_中国_红楼梦3.avi

./电视/韩国:
浪漫漫屋

./电视/韩国/浪漫漫屋:
电视_韩国_浪漫漫屋1.rmvb  电视_韩国_浪漫漫屋2.rmvb  电视_韩国_浪漫漫屋3.rmvb



我知道这个很幼稚,但自己记性不好,留在这里做存根,说不定以后还需要参考。


引用:

本篇引用地址:
http://www.vetcafe.net/cgi-bin/mt3/mt-tb.cgi/2434

发表评论

(如果您以前没在这里发表过评论,也许您发表的评论需要Blog主人的审核才能显示在这里,感谢您的静候。)