
find関数が1階層(カレントディレクトリ)にしか利きません。
Active Perl+MS-DOS(WindowsXP)の環境です。
深い階層を持つディレクトリAで
find(\&dirfiletotal,'.');
を実行し、特定のファイル名を検出しています。
なぜかカレントディレクトリ(A)にあるファイルに対してしか動作しません。(結果は正常です。)
find関数は再帰的、つまり下の階層も含めてファイル検出するのだと思っていましたが、間違いでしょうか?
もし間違いであれば、どのように書き変えればいいか、ヒントをいただけると大変助かります。
どうぞ宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
訂正
next EACH_FILES;
if $_ =~ /^\.+$/;
↓
next EACH_FILES if $_ =~ /^\.+$/;
_--_1l1_1_様、
懇切丁寧に教えてくださいまして、本当にありがとうございました。
日本語ではNGかも、というポイントは目からウロコでした。
言われてみれば、でやっと思い当たりました。
今後こういうことが起こった時には、まずそれを検証してみます。
いただいたスクリプトのお手本を参考に、勉強しながらさっそく使わせていただきます。
本当にありがとうございます。
大変助かりました!
No.1
- 回答日時:
File::Findのfindですね。
再帰的にファイル階層を辿りますよ。Active Perl は使ったことないですが、フォルダ名が日本語とかダメなんですかね。もしそうでしたら、英数字のみのフォルダとファイル名で試したらでどうでしょうか?あとは自分で作ってみるとか。(以下、空白を全角にしていることに注意)
use File::Spec;
use File::Basename;
my $dir = shift || '.';
my @files = find_files($dir);
print $_, $/ for @files;
sub find_files {
my ($dir) = @_;
my $base_name = fileparse($dir);
my @files = ();
# skip .. ... etc
if ( $base_name =~ /^\.\.+$/ ) {
return ();
}
opendir my $dh, $dir or die "$!:$dir";
EACH_FILES:
for ( readdir $dh ) {
# skip . .. ... etc
next EACH_FILES;
if $_ =~ /^\.+$/;
my $file = File::Spec->catfile( $dir, $_ );
if ( -d $file ) {
push @files, find_files($file);
}
else {
push @files, $file;
}
}
closedir $dh or die "$!:$dir";
return @files;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パスから最後のディレクトリだ...
-
batファイルでrenameができませ...
-
Windowsで複数のファイルを同じ...
-
ANSI Cでファイル名、ディレク...
-
chdirがうまくできない
-
DOSコマンドで、標準出力を出力...
-
drtファイルはどうしたら開...
-
VBAでCSVファイルを途中行まで...
-
sprintfで10進数を桁数指定で16...
-
window.open でのファイル指定方法
-
バッチファイルの作り方(CSV→...
-
タブの色を変更する方法
-
エラーログ「\\x8ew\\x92\\xe8...
-
テキストファイルから日本語部...
-
JavaでCSVファイルを高速に読む...
-
C言語で特定の行を抽出する方法...
-
awkスクリプトでダブルクォーテ...
-
openした後、closeしないでプロ...
-
VB6.0でDB接続する際に切断時の...
-
検索ボックスから製品名を検索...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
batファイルでrenameができませ...
-
Windowsで複数のファイルを同じ...
-
FindFirstFileとFindNextFileで...
-
readdir()で得られるファイル・...
-
ディレクトリ名を取得したい
-
ディレクトリの判別
-
vba dir の相対パス
-
C言語でファイル名を取得
-
パスから最後のディレクトリだ...
-
複数ファイルの読み込みについて
-
chdirがうまくできない
-
dos変数の%~dp0は powershellで...
-
CGI::Sessionの使い方
-
コマンド「dir」の結果を、テキ...
-
エラー 'dir.h' : No such fi...
-
LinuxのC言語で、ファイル名の...
-
正規表現で、特定のファイル名...
-
フォルダの中身を知りたい
-
シンボリックリンクを検出でき...
-
makefileでファイルをコピー(...
おすすめ情報