私たちはルートディレクトリから始めて、すべてのシンボリックリンク情報を印刷することに興味があります。次の形式で情報を印刷しようとしています。
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
)。