ディレクトリ

Perl ではディレクトリを操作するために、様々な関数が用意されている。ディレクトリの作成やパーミッションの変更などが行える。

関数機能
chmod(0777, @path) @pathで指定した複数のファイルのパーミッションを変更する。戻り値は変更に成功したファイル数。
chown(uid, gid, @path) @pathで指定した複数のファイルのグループとユーザーを変更する。戻り値は変更に成功したファイル数。
chrdir($dirpath) カレントディレクトリを$dirpathに移動する。成功なら真を返す。
opendir(DH, $dirpath) ディレクトリ $dirpath を開く。
readdir(DH) DH 中に含まれるファイル一覧を取得する。
closedir(DH) ディレクトリを閉じる。
rmdir($path) 指定ディレクトリが空であれば消去する。消去に成功すれば「1」を返す。
mkdir(0755, $path) ディレクトリを作成する。成功すれば「1」を返す。

ディレクトリ操作

ディレクトリの作成から削除までの一連の作業を行うサンプル。

my $path = '/home/user/dir';   #これから作成しようとする「dir」ディレクトリ

#ディレクトリ作成
if( -d $path ){
   print "ディレクトリは存在します。\n";
}else{
   mkdir(0755,$path);   #存在しなければ新たに作成する
}

#ファイルの追加
open(my $fafh, '>',">>$path/xn0123.fa");
print $fafh ">>xn0123\n";
print $fafh "acacacacagggtacatagggg\n";
close($fafh);

open(my $csvfh, '>',">>$path/xn0123.csv");
print $csvfh "a,c,g,t\n";
print $csvfh "8,5,7,2\n";
close($csvfh);


#ディレクトリ中のファイル名の一覧を取得
opendir(my $dh, $path);
@all = readdir($dh);                   #すべてのファイルの名前の一覧
@csv = grep(/\.csv/ , readdir($dh));  #CSVファイルの名前の一覧
closedir($dh)


#ディレクトリ内のファイルを一つずつ開く
foreach my $filename (@all) {
   open(my $fh, '<',"$path/$filename");
   while( my $buff = <$fh>){
      print $buff , "\n";
   }
   close($fh);
}


#ディレクトリ内のファイルをすべて削除
unlink(glob("$path/*.csv"));   #CSVファイルをすべて削除
unlink(glob("$path/*"));       #すべてのファイルを削除

#空となったディレクトリを削除
rmdir $path;