来看一道Perl面试题
据说这道题是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,部分图
[*]# ll /home/
[*]total 404
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 100.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 10.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 11.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 12.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 13.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 14.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 15.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 16.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 17.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 18.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 19.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 1.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 20.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 21.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 22.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 23.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 24.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 25.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 26.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 27.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 28.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 29.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 2.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 30.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 31.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 32.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 33.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 34.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 35.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 36.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 37.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 38.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 39.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 3.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 40.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 41.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 42.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 43.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 44.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 45.sh
[*]drwxr-xr-x 2 root root 4096 Mar2 09:20 46.sh
/home/test下
[*]# ll /home/test/
[*]total 0
[*]-rw-r--r-- 1 root root 0 Mar2 09:48 testa.sh
[*]-rw-r--r-- 1 root root 0 Mar2 09:48 testb.sh
[*]-rw-r--r-- 1 root root 0 Mar2 09:48 testc.sh
[*]-rw-r--r-- 1 root root 0 Mar2 09:48 testd.sh
[*]-rw-r--r-- 1 root root 0 Mar2 09:48 teste.sh
[*]-rw-r--r-- 1 root root 0 Mar2 09:48 testf.sh
[*]-rw-r--r-- 1 root root 0 Mar2 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');
运行一下,测试,大喜,完成,部分图
[*]# ll /home/
[*]total 4
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 100.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 10.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 11.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 12.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 13.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 14.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 15.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 16.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 17.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 18.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 19.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 1.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 20.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 21.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 22.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 23.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 24.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 25.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 26.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 27.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 28.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 29.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 2.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 30.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 31.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 32.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 33.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 34.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 35.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 36.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 37.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 38.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:47 39.shell
/home/test下
[*]# ll /home/test/
[*]total 0
[*]-rw-r--r-- 1 root root 0 Mar2 09:48 testa.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:48 testb.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:48 testc.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:48 testd.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:48 teste.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:48 testf.shell
[*]-rw-r--r-- 1 root root 0 Mar2 09:48 testg.shell
呵,perl 的File::Find模块有三个特殊的变量
[*]$_ 包含目录中的当前文件名
[*]$File::Find::dir 包含当前目录名
[*]$File::Find::name包含$File::Find::dir/$_
其他的功能尚待研究ing.谢谢大家。
页:
[1]