据说这道题是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.谢谢大家。
总结以上是内存溢出为你收集整理的来看一道Perl面试题全部内容,希望文章能够帮你解决来看一道Perl面试题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)