csh - ファイルの存在やサイズで処理を分岐するには
csh - ファイルの存在やサイズで処理を分岐するには
if 文で (-operator filename) の形式でファイル照会ができる。
ファイル照会に使えるオペレーター
次のオペレーターがファイル照会に使える。
-r
-w
-x
-e
-o
-z
-f
-d
条件を満たす場合は true (1) を返す。
そうでなければ false (0) を返す。
もしも filename が存在しない、またはアクセスできない場合、false を返す。
例)ファイルまたはディレクトリが存在するか
if ( -e /path/to/file.txt ) then
echo "File exists."
endif
if ( -e /path/to/directory ) then
echo "Directory exists."
endif
例)プレーンファイルか
テキストファイルやバイナリーファイルといった通常のファイルなら true が返る。
if ( -f /path/to/file.txt ) then
echo "It is plain file."
endif
デバイスファイル等の特殊なファイルなら false が返る。
if ( -f /dev/kbd ) then
echo "It is plain file."
else
echo "not plain file." # こちらの分岐に入る
endif
ディレクトリには使えない。false が返る。
if ( -f /path/to/directory ) then
# true にはならない
endif
例)ディレクトリか
if ( -d /path/to/directory ) then
echo "It is directory."
endif
ファイルには使えない。false が返る。
if ( -d /path/to/file.txt ) then
# true にはならない
endif
例)空のファイルか
if ( -z /path/to/file.txt ) then
echo "It is empty file."
endif
例)空のファイルでないか
「ファイルが存在する AND 空のファイルでない」という条件で判定する。
if ( -e /path/to/file.txt && ! -z /path/to/file.txt ) then
# ファイルが空でないときに実行する処理
endif
もしも存在チェックをせず「! -z」だけにした場合、ファイルが存在しないときも処理されてしまう。
→ファイルが存在しないため false が返る。false が ! で反転されて true になる。というわけ。
# ★★★これは悪い例★★★
if ( ! -z /path/to/notfound-file.txt ) then
# /path/to/notfound-file.txt が存在しないときも実行されてしまう!!!
endif
例)空のディレクトリか
-z ではディレクトリが空かどうかを判断できなかった。
if ( -z /path/to/directory ) then
# true にはならない
endif
代わりに ls -1
で出力したファイルリストの行数を wc -l
で数えることで判断する。
if ( -e /path/to/directory ) then
if ( `ls -1 /path/to/directory | wc -l` == 0 ) then
# ディレクトリが空のときの処理
echo "empty directory"
endif
endif
★注意事項★
次のように書くとディレクトリが存在しない場合に「No such file or directory」と出力されてしまう。
これは評価よりも前に、バッククォートで囲んだコマンドが展開されるからである。
# ★★★この書き方はやめよう★★★
if ( -e /path/to/notfound_directory && `ls -1 /path/to/notfound_directory | wc -l` == 0 ) then
echo 'empty directory'
endif
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事にコメントをしてみませんか?