製造業のSEでも使える業務に役立つPerlプログラム

takashi42332008-07-27


Rubyが本番環境のサーバに入っていなく,業務に使えないので,最近はPerlでプログラムを書く事が多いです.*1

さて,*ux系だとtreeというコマンドがあります.
ちなみにMS-DOSにもありますが,表示するディレクトリ階層のオプションが指定出来ないので不便だったりします.
で,表示するだけならそれでも良いのですが,あるディレクトリの中にあるファイル全てを抽出したい場合.
階層が深ければ深いほど,マウスの作業ではやる気が削がれます.

そこで,Perlスクリプトの出番です.
例えば,/Users/nishi/tmp/以下のディレクトリの中にあるファイルを/Users/nishi/tmp2/ディレクトリに移動させたい場合.

#!/usr/bin/perl

use warnings;

use File::Find;
use File::Copy;

$dest_dir = '/Users/nishi/tmp2/';
@directories_to_search = '/Users/nishi/tmp/s';

find \&wanted, @directories_to_search;

#ファイルが見つかる度に実行される.
sub wanted{
    $file_name = $File::Find::name;
    if (! -d $file_name ){
	copy $file_name ,$dest_dir;
    }
}

というスクリプトで無事に解決できます.

ただし,上記のプログラムでは以下の点に注意が必要.

  1. 同名のファイルは上書きされる.
  2. そもそもwindowsperlが実行出来る環境を整えないとダメ.


参考URL
File::Find - Traverse a directory tree. - metacpan.org
ファイルをコピーする - Perl入門ゼミ
http://katsubemakito.net/cgiperl/directory/perl2.html

*1:業務に直接関係ない事してるからあんまり大きい声では言えない.ウィンドウズのCygwinで動かすとか...