据说这道题是QQ的,看下怎么解答为好
题目:
把当前目录下(包含子目录)下所有后缀为.sh的文件后缀变更为.shell(用PERL完成)
一、先人为的制造一些.sh文件
这个用shell吧,方便
- for i in `seq 100`;do touch $i.sh;done
- for i in testa testb testc testd teste testf testg;do touch /home/test/$i.sh;done
好,生成文件,OK,部分图
- [root@test ~]# ll /home/
- total 404
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 100.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 10.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 11.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 12.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 13.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 14.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 15.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 16.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 17.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 18.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 19.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 1.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 20.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 21.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 22.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 23.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 24.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 25.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 26.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 27.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 28.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 29.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 2.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 30.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 31.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 32.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 33.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 34.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 35.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 36.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 37.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 38.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 39.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 3.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 40.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 41.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 42.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 43.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 44.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 45.sh
- drwxr-xr-x 2 root root 4096 Mar 2 09:20 46.sh
/home/test下
- [root@test ~]# ll /home/test/
- total 0
- -rw-r--r-- 1 root root 0 Mar 2 09:48 testa.sh
- -rw-r--r-- 1 root root 0 Mar 2 09:48 testb.sh
- -rw-r--r-- 1 root root 0 Mar 2 09:48 testc.sh
- -rw-r--r-- 1 root root 0 Mar 2 09:48 testd.sh
- -rw-r--r-- 1 root root 0 Mar 2 09:48 teste.sh
- -rw-r--r-- 1 root root 0 Mar 2 09:48 testf.sh
- -rw-r--r-- 1 root root 0 Mar 2 09:48 testg.sh
写perl 脚本,记得perl有一个模块叫File::Find,可以完成这个效果,试下
code:
- #!/usr/bin/perl -w
- use strict;
- use File::Find;
- sub wanted {
- if (-f $File::Find::name) {
- if ($File::Find::name =~ m/\.sh$/) {
- #print $File::Find::name,"\n";
- #print $_,"\n";
- #print $File::Find::dir,"\n";
- $File::Find::name =~ s/\.sh$/\.shell/g;
- rename $_,$File::Find::name;
- }
- }
- }
- find(\&wanted,'/home');
运行一下,测试,大喜,完成,部分图
- [root@WEB-01 ~]# ll /home/
- total 4
- -rw-r--r-- 1 root root 0 Mar 2 09:47 100.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 10.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 11.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 12.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 13.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 14.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 15.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 16.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 17.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 18.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 19.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 1.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 20.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 21.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 22.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 23.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 24.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 25.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 26.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 27.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 28.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 29.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 2.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 30.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 31.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 32.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 33.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 34.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 35.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 36.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 37.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 38.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:47 39.shell
/home/test下
- [root@WEB-01 ~]# ll /home/test/
- total 0
- -rw-r--r-- 1 root root 0 Mar 2 09:48 testa.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:48 testb.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:48 testc.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:48 testd.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:48 teste.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:48 testf.shell
- -rw-r--r-- 1 root root 0 Mar 2 09:48 testg.shell
呵,perl 的File::Find模块有三个特殊的变量
- $_ 包含目录中的当前文件名
- $File::Find::dir 包含当前目录名
- $File::Find::name 包含$File::Find::dir/$_
其他的功能尚待研究ing.谢谢大家。
本文转自dongfang_09859 51CTO博客,原文链接:http://blog.51cto.com/hellosa/504161,如需转载请自行联系原作者