最近は、Pythonに心を奪われ、Perl信者ではなくなってきているが、
以下に示すテクニックは、pythonだと長くなるようで、perlに軍配が上がると思っています。
非常に実用的です。
loop.pl(199)
$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を指定してください。