お題を解く。再帰系処理
Rubyでやった。
とりあえず、シンプルにfindモジュールを使ってみた。
違う書き方もあとで考えて書く。
お題
指定したフォルダ以下にある、ファイル名が"~"で終わるファイルを削除するプログラムを作ってください。指定したフォルダの中にあるフォルダのさらに中にあるファイルも削除の対象です。
コード
# Findモジュールは再帰的にファイルを探す為のモジュール require "find" # パスを書く targetDir = '対象のディレクトリのフルパスを指定' # 正規表現を使ってファイル名を判断し削除。 Find.find(targetDir) {|file| File.delete(file) if file.to_str =~ /~$/}
お題を解く。続・再帰系処理(Perlでも)
Perlでもやってみた。
再帰処理を含めてオレオレ実装した。
晒すのが恥ずかしいコード・・・
ご指摘大歓迎です。(^^;
コード
use strict; # パスを指定する my $dirPath = "対象のディレクトリのフルパスを指定"; # 再帰的にファイルを削除する recursiveFind($dirPath); #------------------------------------------------------ # 再帰処理 #------------------------------------------------------ sub recursiveFind { my ($dir) = @_; # 起点となるディレクトリへ移動して chdir($dir); # ファイルリストを五十音順にソートして読み取る opendir(DIR,"$dir"); my @fileList = sort readdir(DIR); closedir(DIR); # ディレクトリのファイル群を処理 foreach my $file (@fileList){ # カレントディレクトリと上位ディレクトリファイルは飛ばす next if( $file =~ /^\.+$/ ); # ディレクトリの場合は再帰する if ( -d $file ){ my $nestDir .= "$dir/$file"; recursiveFind( $nestDir ); } # 再帰時にカレンドディレクトリが移っているので元へ戻す chdir($dir); # 末尾が~のファイルは削除する unlink("$dir/$file") if -f $file and $file =~ /~$/; } }