最近は、Pythonに心を奪われ、Perl信者ではなくなってきているが、
以下に示すテクニックは、pythonだと長くなるようで、perlに軍配が上がると思っています。
非常に実用的です。
loop.pl(331)
$dir 以降のすべてのファイルを見つけ出す。
#! /usr/bin/perl
use strict;
use warnings;
use File::Find;
use File::Path;
sub print_file{
my $target = $File::Find::name;
my $dir = $File::Find::dir;
our @list;
if(-f "$target"){
push(@list,$target);
}
}
&main();
exit(1);
sub main{
my $dir = $ARGV[0];
my $target = $ARGV[1];
our @list;
find(\&print_file,$dir);
my $file;
foreach $file (@list){
if($file =~ /$target/){
print "$file \n";
system("python make_netcdf.py $file");
}
}
}
このperlプログラムのprint_fileのサブルーチンは基本的に変える必要はなく、
mainの中で、dir を指定し、そのディレクトリ以下のすべてのファイルで、
targetにマッチするファイルについて、systemで囲まれたコマンドを実施する。という内容となっています。
ここで注意は、print_file のサブルーチンは、ファイルのみに反応し、ディレクトリには反応しないようになっています。
ただし、dirに、相対PATHを指定すると、失敗します。必ず、dirには絶対PATHを指定してください。