Perl命令行应用程序详解

2019-10-01 10:56:45刘景俊

简易计算器


perl -ne 'print eval($_)."n"'

批量重命名文件
以下是在verycd网站下载的资料,现对其改名的例子:


$ ls
帝王之死001.mp3 帝王之死006.mp3
$ perl -MFile::Find -e 'find sub{ rename $_,substr($1,1,2).".mp3" if /(d+).mp3$/;}, "." '
$ ls
01.mp3 06.mp3

$ ls
李斯傳奇 - 第001回.mp3
$ perl -MFile::Find -e 'find sub{ rename $_,$1.".mp3" if /(d+)(.*).mp3$/;}, "." '
$ ls
001.mp3

$ ls
十二生肖妙品欣赏系列 01 子鼠精灵.pdf
$ perl -MFile::Find -e 'find sub{ rename $_,"$2$3".".pdf" if /(.*)s(d+)s(.*).pdf$/;}, "." '
$ ls
01子鼠精灵.pdf

中文标点符号替换(中文在此占3个字符位)
女人当国$ ls
女人当国01:选秀入宫.mp3      女人当国16:“议政王”的奥妙.mp3

将'mp3'文件修改为:01.选秀入宫.mp3,像如下格式:
perl -MFile::Find -E 'find sub{ rename $_,"$1.$3".".mp3" if /(d{2})([^u4E00-u9FA5]{3})(.*).mp3$/;}, "." '
女人当国$ ls
01.选秀入宫.mp3         13.京城风云动.mp3

...
秦琼:“战将”最终成“门神”(上).mp3
将'“”)'引号去掉
perl -MFile::Find -E 'find sub{ my $o=$_; s/“|”|)//g;rename $o,$_}, "." '

秦琼:战将最终成门神(上).mp3

将':('替换为'.'
perl -MFile::Find -E 'find sub{ my $o=$_; s/:|(|,/./g;rename $o,$_}, "." '
秦琼.战将最终成门神.上.mp3

在数字编号后加入'.'
01石头里生出美猴王.mp3
perl -MFile::Find -E 'find sub{my $o=$_;s/(^d+)/$1./;rename $o,$_},"."'
01.石头里生出美猴王.mp3

将前置中文字符去掉
独立书店_01.台北.书店之城.1.mp3
perl -MFile::Find -E 'find sub{ my $o=$_; s/([^u4E00-u9FA5]{12}_)//g;rename $o,$_}, "." '
01.台北.书店之城.1.mp3

在命令行下查看当前目录下的目录
用于列出当前目录的目录:一级目录和所有目录。
使用内置的File::Find模块


perl -MFile::Find -E 'find sub{ print "$_," if(-d && length >1) }, $File::Find::prune = 1, "." '

这将会列出所有的目录,目前还写不出仅列出当前目录下一级目录。

使用File::Find::Rule模块实现起来最比较容易


perl -MFile::Find::Rule -E '@a=File::Find::Rule->directory->in(".");foreach(@a){say unless(//|./)};'
perl -MFile::Find::Rule -E 'say for grep $_ ne ".", File::Find::Rule->maxdepth(1)->directory->in(".");'

对目录下的文件进行大小写修改


$ ls
CD1 CD2 CD3 CD4 CD5 CD6
$ perl -MFile::Find -e 'find sub{ rename $_,lc($1) if /(w+d$)/;}, "." '
$ ls