シンボリックリンクとそのポインタを除くディレクトリの内容を一覧表示するには?

シンボリックリンクとそのポインタを除くディレクトリの内容を一覧表示するには?

アプリケーションがインストールされているディレクトリがあり、最新バージョンを指すようにシンボリックリンクを更新します。

これにより、それを指すシンボリックリンクがないため、多くの古いディレクトリが使用されなくなります。

これまでにls -l検査を使用し、手動で削除してきました。これをスクリプトで書けば便利です。

シンボリックリンクを除外できますか?

find -maxdepth 1 \! -type l -exec ls -dl {} +

しかし、彼らが何を指しているのか、どのように見つけて排除するのかわかりません。

シンボリックリンク以外のディレクトリを一覧表示する方法そして彼らが指すディレクトリは何ですか?

ベストアンサー1

これにより、zsh次のことができます。

linktargets=(*(N@:P))
ls -ld -- *(^@e['(($linktargets[(eI)$REPLY:P]))'])

すべてのシンボリックリンクに適用される$linktargets配列を作成し、シンボリックリンクではなく、配列内の実際のrealpath()パスls -ldが見つからないファイルを渡します。

実際のパスを取得することに関連しない別の方法は、すべての非symlinkファイルの配列、つまりシンボリックリンクターゲットを含む別の配列を構築してから2つを引くことです。

zmodload zsh/stat
non_symlinks=(*(^@))
stat -A symlink_targets +link -- *(@)
ls -ld -- ${non_symlinks:|symlink_targets}

シンボリックリンク先には文字が含まれていないと仮定しますが/(リンクはlink -> file、is not link -> ./filelink -> /path/to/file...)

おすすめ記事