3

シンボリックリンクの複雑なネストをたどり、パスの途中にあるものも含め、途中のすべてのシンボリックリンクを完全にキャプチャしてレポートするための最良のツール/プログラミングテクニックは何ですか (詳細については以下を参照してください)

これが具体的な例です。シェルコマンドからの次の出力を検討してください

 ls -l /Library/Java/Home
 lrwxr-xr-x  1 root  admin  48 Feb 24 12:58 /Library/Java/Home -> /System/Library/Frameworks/JavaVM.framework/Home

ls コマンドを使用すると、ファイル /Library/Java/Home ファイルが別の場所へのシンボリック リンクであることを確認できます。ただし、指しているものがシンボリックリンクであることは通知されません

ls -l /System/Library/Frameworks/JavaVM.framework/Home
lrwxr-xr-x  1 root  wheel  24 Feb 24 12:58 /System/Library/Frameworks/JavaVM.framework/Home -> Versions/CurrentJDK/Home

これにより、指定されたファイルのパスの一部がシンボリック リンクであることを認識できなくなります。

ls -l /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
lrwxr-xr-x  1 root  wheel  3 Feb 24 12:58 /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK -> 1.5

この物語を完成させるために、これは別のシンボリックリンクです

ls -l /System/Library/Frameworks/JavaVM.framework/Versions/1.5
lrwxr-xr-x  1 root  wheel  5 Feb 24 12:58 /System/Library/Frameworks/JavaVM.framework/Versions/1.5 -> 1.5.0

最後に、「実際の」フォルダーを指します。

リンクの完全なチェーンを何らかの方法で視覚化できるツールはありますか (グラフィカルまたはプレーンな古いテキストのいずれか)? 自分でこれをスクリプト化できると確信しています (そして、あなたが望むなら、それを実行して共有してください!) が、「ああ、くだらない、エッジケース。ああ、くそ、別の」でいっぱいになるようなもののようです。エッジケース」。誰かがすでに面倒を見てくれていることを願っています。

私はフリーランス/契約の仕事をしています.誰もがシンボリックリンクをわずかに異なる方法で使用して、PHPアプリケーションをWebサーバーにインストールします. 私の仕事の半分は通常、この (必然的に) 文書化されていない階層をネスト解除して、新しいコード/モジュールを配置する場所を知ることです。

4

5 に答える 5

0

究極の指示対象を知りたいだけなら、php にはそれができるrealpath関数があります。

于 2009-03-17T20:55:15.173 に答える
0

is_linkPHP では、とを使用できますreadlink

使用例:

function dereference_link($path) {
  $parts = array();
  foreach (explode(DIRECTORY_SEPARATOR, $path) as $part) {
    $parts[] = $part;
    $partial = implode(DIRECTORY_SEPARATOR, $parts);
    if (is_link($partial)) {
      $result = dereference_link(readlink($partial) . substr($path, strlen($partial)));
      array_unshift($result, $path);
      return $result;
    }
  }
  return array($path);
}
于 2009-03-17T21:13:00.467 に答える