设为首页 收藏本站
查看: 761|回复: 0

[经验分享] perl文件名过滤工具

[复制链接]

尚未签到

发表于 2015-12-27 12:58:33 | 显示全部楼层 |阅读模式
  有时候客户给的文件文件名里面有很多空格,在网页解析的时候会把这些空格变成只保留一个,所以得去掉这些空格。通过重命名是一种方法。这里我是对文件名进行批量过滤。



1 #!/usr/bin/perl -w
2 use strict;
3 use warnings;
4 use File::Find ();
5 use File::Basename ;
6
7 #文件名过滤工具(批量改文件名,去掉文件名中的全部/或多余空格)
8 #暂不支持目录重命名
9 use vars qw/*name *dir *prune/ ;
10 *name = *File::Find::name ;
11 *dir = *File::Find::dir  ;
12 *prune = *File::Find::prune ;
13
14 our $space = 0 ; #默认留1个空格,$space = 0 时去除所有空格
15
16 #回调函数
17 sub wanted
18 {
19     if( /\.jpg/s )
20     {
21         my @file_array = split /\n/, $name ;
22         foreach my $file ( @file_array )
23         {
24             my ($nameName,$path,$suffix) = fileparse($file,".jpg");
25             print "name:$nameName$suffix\t path:$path\n"
26         }
27     }
28 }
29
30 sub renamer;
31 sub folderTraverse
32 {
33     my $dir = shift ;
34     #File::Find::find({wanted=>\&renamer},$dir);
35     File::Find::find({wanted=>\&singleFile_renamer},$dir);
36 }
37 sub renamer
38 {
39     my @file_array = split /\n/, $name ;
40     my %dir_array ;#为了判断元素是否重复,用hash表
41     #先对文件进行重命名
42     foreach my $file ( @file_array )
43     {
44         my ($fileName,$path,$suffix) = fileparse($file,".jpg");
45         
46         $dir_array{$path} = 1 if(!exists( $dir_array{$path} )) ;
47         
48         my $newFile = $fileName ;
49         ( $space ) ? ( $newFile =~ s#\s{2,}# #g ) : ( $newFile =~ s#\s{2,}##g )  ;
50         if( -e $newFile ){}
51         else{
52             if( rename $file => $newFile ){}
53             else{warn "rename $file error!";}
54         }
55     }
56     #再对目录进行重命名      !!!!!!!这涉及到一个递归的问题!如果上一级目录先重名于下一级,这样就没法找到下一级目录!
57     foreach my $dir ( %dir_array )
58     {
59         my $newDir = $dir =~ s#\s{2,}# #gr ;
60         rename $dir => $newDir ;
61     }
62 }
63
64 sub singleFile_renamer
65 {
66     my @file_array = split /\n/, $name ;
67     foreach my $file ( @file_array )
68     {
69         my ($fileName,$path,$suffix) = fileparse($file,".jpg");
70         
71         my $newFile = $fileName ;
72         ( $space ) ? ( $newFile =~ s#\s{2,}# #g ) : ( $newFile =~ s#\s+##g )  ;
73         if( -e $path.$newFile.$suffix ){}
74         else{
75             if( rename $file => $path.$newFile.$suffix ){
76                 print "替换文件:$fileName 为 $newFile \n";
77         }
78             else{warn "rename $file error!";}
79         }
80     }
81 }
82
83
84 sub main
85 {
86     my $dir = 'C:\Users\Administrator\Desktop\products' ;
87     folderTraverse($dir);
88 }
89 main();
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-156953-1-1.html 上篇帖子: Try::Tiny Perl 异常的处理 下篇帖子: Unicode in Perl 初探
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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