シンボリックリンクのリンク先を取得する (readlink)
PHP 2016/08/03
readlink
関数がreadlink
コマンドとほとんど同じように動作する。
準備
$ mkdir -p aaa/bbb
$ ln -s aaa AAA
## aaa へのリンクを AAA という名前で作成
$ ln -s bbb aaa/BBB
## bbb へのリンクを aaa/BBB という名前で作成
## リンク先たる「bbb」は aaa/BBB からの相対パス
$ ln -s dummy aaa/DUMMY
## 存在しないリンク先
状況
$ find .
.
./AAA # <- aaa へのシンボリックリンク
./aaa
./aaa/DUMMY # <- リンク先が存在しないシンボリックリンク
./aaa/bbb
./aaa/BBB # <- bbb へのシンボリックリンク
実行例
echo readlink("AAA"); echo "\n";
// aaa
echo readlink("AAA/BBB"); echo "\n";
// bbb
echo readlink("aaa/bbb"); echo "\n";
// PHP Warning: readlink(): Invalid argument
// bbbはシンボリックリンクではないので
echo readlink("AAA/bbb"); echo "\n";
// PHP Warning: readlink(): Invalid argument
// AAAはシンボリックリンクだけどもbbbはシンボリックリンクではないので
echo readlink("AAA/DUMMY"); echo "\n";
// dummy
// リンク先が存在しなくてもOK
readlink
関数 | PHP Manual
http://php.net/manual/ja/function.readlink.php
Ruby 2013/04/30
path
がシンボリックリンクの場合に、path
をリンク先に書き換える。
if File.exists?(path) && File.ftype(path) == 'link' then
link = File.readlink(path)
path = File.expand_path(link, File.dirname(path))
end
Perl 2014/07/15
readlink
は引数がシンボリックリンクの場合にリンク先のパスを返す。シンボリックリンクでない場合は undef
を返す。
-l
演算子はシンボリックリンクかどうかを判定する。
if (-l path) {
print readlink(path);
}
readlink
| perldoc.jp
http://perldoc.jp/func/readlink
sh (シェルスクリプト) 2014/11/23
readlink
コマンドを使える。
readlink -f シンボリックリンク
以下はls
コマンドを使って無理やりやる方法。
ls
コマンドの出力フォーマットが違う環境だとうまくいかないかもしれない。
ls -l シンボリックリンク | perl -anle '$_ =~ /-> (.+)$/; print $1'