現在のディレクトリのシンボリックリンクをリストしますか?


8

この質問は、現在のディレクトリでディレクトリを見つけることについて話します。解決策は基本的に:

ls -d */

それは素晴らしいですが、シンボリックリンクを簡単にリストするにはどうすればよいですか?私は次のようなものを使用する必要がありますか

find . -xtype l -d 1
(intended to find symlinks max depth 1 - doesn't work)

またはもっと簡単な方法はありますか?これにlsを使用できますか?


私のUbuntuシステムでは、(FreeBSD、NetBSD、MacOS X、OpenBSDとの互換性のために)同義語であるそのman findショーをざっと見てください。と同じではありません。。。各ディレクトリのコンテンツをディレクトリ自体の前に処理する-d-depth-maxdepth-depth
Peter.O

回答:


9

zshで(N括弧で囲んで、名前がaで始まるシンボリックリンクを含めます.):

echo *(@)

ほとんどのfind実装で:

find -maxdepth 1 -type l

POSIX準拠:

find . -type d \! -name . -prune -o -type l -print

または、シェルループを使用します。

for x in * .*; do
  if [ -h "$x" ]; then echo "$x"; done
done

1
以下のため-pruneのオプション、あなたが使用する必要がありますfind topdir ! -name topdir -prune。それ以外の場合、開始ディレクトリも無視されます。
Arcege、2011年

6

これはMacにはありませんが、

find . -maxdepth 1 -type l

私のために働く。


3

あなたは使うべき-typeではなく-xtype

   -xtype c
          The same as -type unless the file is a symbolic link.  For  sym‐
          bolic  links:  if the -H or -P option was specified, true if the
          file is a link to a file of type c; if the -L  option  has  been
          given,  true  if  c is `l'.  In other words, for symbolic links,
          -xtype checks the type of the file that -type does not check.

デフォルトは-Pなので、-xtypeオプションはシンボリックリンク自体ではなく、結果のファイルを判別しようとします。実際、私はいくつかの肯定的な結果を得ていますが、これはバグのようです。-P -xtype l結果として得られる場合に限っ(シンボリックリンクの上)はtrueを返すシンボリックリンクそのものです。

次も使用できます:ls -FA | sed -ne 's/@//p'これはシンボリックリンクのみを表示します。


素敵なlsソリューション
frogstarr78

2
sed -ne 's/@//p'(そしてsed -ne 's/@$//p')も安全なテストではありません。最初のバージョンはls出力の@どこかで誤検出が発生し、2番目のバージョンはファイル名が実際に終わるときに誤検出を返すためです@
Peter.O

1

現在のディレクトリ内のシンボリックリンクであるファイルのみを見つけるには:

find . -type l -printf '%p -> %l\n'

これにより、すべてのシンボリックリンクファイルが再帰的に一覧表示されます。また、ポイントする実際のファイルも表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.