ディレクトリの作成と削除1
■この章で解説する組み込み関数
mkdir, rmdir
■この章でできること
・ディレクトリを作成する
・ディレクトリを削除する

 ここでは、ディレクトリの作成と削除方法を解説します。ディレクトリを作成するにはmkdir関数を使います。

mkdir
ディレクトリを作成する。
書式
mkdir dirname, mode
引数
dirname:
作成するディレクトリ名
mode:
パーミッション(8進数で指定する)
戻り値
成功した場合1、失敗した場合0を返し$!をセットする。

 ディレクトリを作成するときに、パーミッションを指定しないと、現在の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関数を使います。

rmdir
ディレクトリを削除する。
書式
rmdir dirname
引数
dirname:
削除するディレクトリ名
戻り値
成功した場合1、失敗した場合0を返し$!をセットする。

 ここでは組み込み関数のmkdirやrmdirを使って単一のディレクトリの作成や削除をする方法を解説しましたが、File::Pathモジュールを使うと、複数のディレクトリを再帰的に一括作成したり、ディレクトリの中のファイルやサブディレクトリをごっそりと一括削除したりできます。詳細はディレクトリの作成と削除2を参照してください。