ルートディレクトリから始めて、完全なシンボリックリンク情報を印刷します。

ルートディレクトリから始めて、完全なシンボリックリンク情報を印刷します。

私たちはルートディレクトリから始めて、すべてのシンボリックリンク情報を印刷することに興味があります。次の形式で情報を印刷しようとしています。
symbolic name -> actual name 【同じ行に注目】

私たちは次のことを試み、象徴的な名前と実際の名前を得ました。しかし、他の行で:
find . -type l -print -exec readlink -f {} \;

答え1

私はあなたが離れているとは思わない。-printf代わりに使用すると-print(あなたのバージョンfindに対応すると仮定)、次のような結果が得られます。

find / -type l -printf "%p -> " -exec readlink -f {} \;

出力例

/bin/apropos -> /bin/whatis
/bin/awk -> /bin/gawk
/bin/bzcmp -> /bin/bzdiff

参考までに、

ls -gl /bin/apropos
lrwxrwxrwx 1 roaima 10 Mar 28 20:15 /bin/apropos -> whatis

途切れたリンクの場合、-printf改行なしですごい線が得られます。

答え2

そしてzsh

for link (**/*(ND@^-@)) print -r -- "$link -> $link:P"

ここで、@^-@glob拡張は、破損していないシンボリックリンクファイル(ターゲットにアクセスできるシンボリックリンク、標準パスを決定するために必要であり、GNUと同じ)に制限されfindます-type l ! -xtype l$link:Pリンクの実際のパスを提供します(realpath()標準関数またはGNUが実行するのと同様に、すべてのコンポーネントシンボリックリンクが解決された後の正規絶対パスreadlink -f)。

関連情報