ファイルの種類(ファイル / ディレクトリ / シンボリックリンク)を確認するには

Java

Signature:

PHP

// ディレクトリかどうかを判定
if (fileperms("/home/foo/testfile") & 0x4000) {
    ...;
}
// または
if (is_dir("/home/foo/testfile")) {
    ...;
}

// 通常のファイルかどうかを判定
if (fileperms("/home/foo/testfile") & 0x8000) {
    ...;
}
// または
if (is_file("/home/foo/testfile")) {
    ...;
}

// シンボリックリンクかどうかを判定
if (fileperms("/home/foo/testfile") & 0xA000) {
    ...;
}

filepermsで、他にもソケットやパイプなどの判定ができるみたい。

is_file はディレクトリに対しては false になる。

is_diris_file は、対象が存在しない場合は false になる。

fileperms 関数 | PHP Manual
http://php.net/manual/ja/function.fileperms.php

is_dir 関数 | PHP Manual
http://php.net/manual/ja/function.is-dir.php

is_file 関数 | PHP Manual
http://php.net/manual/ja/function.is-file.php

Python

import os

# ディレクトリではなく通常のファイルかどうかを判定
if os.path.isfile("/home/foo/testfile"):
    ...

# ディレクトリかどうかを判定
if os.path.isdir("/home/foo/testfile"):
    ...

# シンボリックリンクかどうかを判定
if os.path.islink("/home/foo/testfile"):
    ...

os.path.isfile はディレクトリではなく通常のファイルの場合に True を返す。存在しないか、存在してもディレクトリの場合は False を返す。シンボリックリンクの場合はリンク先を見て判定する。

os.path.isdir はディレクトリとして存在する場合に True を返す。存在しないか、存在してもディレクトリでない場合は False を返す。シンボリックリンクの場合はリンク先を見て判定する。

os.path.isfile | Python 2.7 documentation
http://docs.python.jp/2/library/os.path.html#os.path.isfile

os.path.isfile | Python 3 documentation
http://docs.python.jp/3/library/os.path.html#os.path.isfile

os.path.isdir | Python 2.7 documentation
http://docs.python.jp/2/library/os.path.html#os.path.isdir

os.path.isdir | Python 3 documentation
http://docs.python.jp/3/library/os.path.html#os.path.isdir

os.path.islink | Python 2.7 documentation
http://docs.python.jp/2/library/os.path.html#os.path.islink

os.path.islink | Python 3 documentation
http://docs.python.jp/3/library/os.path.html#os.path.islink

Ruby / JRuby

# ファイルの種類を取得
File.ftype('/home/foo/testfile')

File.ftype は以下のような文字列を返す。

'file'
ファイル
'directory'
ディレクトリ
'link'
シンボリックリンク。リンク先の種類に依らず。

Perl

# 通常のファイルかどうかを判定
# シンボリックリンクの場合はリンク先がファイルかどうかを判定
if( -f '/home/foo/testfile' ){
    ...;
}

# ディレクトリかどうかの判定
# シンボリックリンクの場合はリンク先がディレクトリかどうかを判定
if( -d '/home/foo/testfile' ){
    ...;
}

# シンボリックリンクかどうかの判定
if( -l '/home/foo/testfile' ){
    ...;
}

シンボリックリンク判定の演算子は、シェルスクリプトでは大文字の -L だが Perlでは小文字の -l

sh (シェルスクリプト)

# 通常のファイルかどうかを判定
# シンボリックリンクの場合はリンク先がファイルかどうかを判定
if [ -f /home/foo/testfile ]; then
    ...
fi

# ディレクトリかどうかを判定
# シンボリックリンクの場合はリンク先がディレクトリかどうかを判定
if [ -d /home/foo/testfile ]; then
    ...
fi

# シンボリックリンクかどうかを判定
if [ -L /home/foo/testfile ]; then
    ...
fi

シンボリックリンク判定の演算子は、Perlでは小文字の -l だがシェルスクリプトでは大文字の -L

-> シェルスクリプトの演算子

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。