ここでは、ディレクトリの作成と削除方法を解説します。ディレクトリを作成するにはmkdir関数を使います。
ディレクトリを作成するときに、パーミッションを指定しないと、現在のumask値でパーミッションが設定されます。パーミッションを指定すると、現在のumask値で修飾したパーミッションが設定されます。
umask値というのは、新しくファイルやディレクトリを作成するときにマスクされるパーミッションの値です。例えばumask値が1であった場合は、ファイルやディレクトリのパーミッションを777で作成しても、実際に作成されるのは776になります。
では、サンプルを見てみましょう。
#!/usr/bin/perl ############################################# # ディレクトリの作成と削除のサンプル # Author: "Perl Programming Tips" ############################################# # 現在のumaskの値を出力 $mask = umask(); print "$mask\n"; # 現在のumaskのままでディレクトリを作成 mkdir("tempdir1") or die($!); # パーミッションを指定してディレクトリを作成 mkdir("tempdir2", 07) or die($!); # パーミッションを指定してディレクトリを作成 mkdir("tempdir3", 077) or die($!); # パーミッションを指定してディレクトリを作成 mkdir("tempdir4", 0777) or die($!); # 現在のumaskのままでディレクトリを作成 mkdir("tempdir5") or die($!); # ディレクトリの削除 rmdir("tempdir5") or die($!);
実行結果は次のようになります。
[g@630m temp]$ ls -l 合計 4 -rw-rw-r-- 1 g g 671 7月 21 03:14 file06_01.pl [g@630m temp]$ perl file06_01.pl 2 [g@630m temp]$ ls -l 合計 20 -rw-rw-r-- 1 g g 671 7月 21 03:14 file06_01.pl drwxrwxr-x 2 g g 4096 7月 21 03:15 tempdir1 d------r-x 2 g g 4096 7月 21 03:15 tempdir2 d---rwxr-x 2 g g 4096 7月 21 03:15 tempdir3 drwxrwxr-x 2 g g 4096 7月 21 03:15 tempdir4 [g@630m temp]$
最初に現在のumask値をumask関数で取得して表示しています。出力結果を見ると2になっています。次にパーミッションを指定しないでディレクトリtempdir1を作成しています。その後はパーミッションを指定してディレクトリtempdir2、tempdir3、tempdir4をそれぞれ作成しています。パーミッションは先頭に0を付けて8進数で指定します。
実行後のディレクトリを見ると、それぞれ指定したパーミッションからumaskの値を引いたパーミッションでディレクトリが作成されているのがわかります。
次はディレクトリtempdir5を作成してから、削除しています。ディレクトリの削除にはrmdir関数を使います。
ここでは組み込み関数のmkdirやrmdirを使って単一のディレクトリの作成や削除をする方法を解説しましたが、File::Pathモジュールを使うと、複数のディレクトリを再帰的に一括作成したり、ディレクトリの中のファイルやサブディレクトリをごっそりと一括削除したりできます。詳細はディレクトリの作成と削除2を参照してください。