ディレクトリからシンボリックリンクを除外

ディレクトリからシンボリックリンクを除外

ディレクトリリストからシンボリックリンクを除外したいと思います。私は次のコマンドを使用しています:

dir --ignore=@ -F

ただし、シンボリックリンクは表示されているとおりにリストされます。

https://i.stack.imgur.com/kWxi4.png

dirコマンドを使用するときにそれを除外する方法は?

ありがとうございます。

答え1

find以下を使用してシンボリックリンクを除外できます。

find -maxdepth 1 ! -type l ! -path './.*' -ls

! -type lシンボリックリンクは除外しました。したがって、ディレクトリ、一般ファイル、特殊ファイルなどが表示されます。隠しファイルを除外し
ました! -path './.*'(例.bashrc:、、.profile

出力が必要な場合、または以下をls使用するdir必要がある場合:

#With color
find -maxdepth 1 ! -type l ! -path './.*' -exec ls --color=yes -Fd {} +

#No color
find -maxdepth 1 ! -type l ! -path './.*' -exec ls -Fd {} +

答え2

シェルを使用すると、zsh次のものを使用できます。グローバル予選グローバル拡張子でタイプ別にファイルをフィルタリングします。

dir -Fd -- *(^@)

dir現在のディレクトリに隠されていないファイルを呼び出しますいいえ^)タイプシンボリックリンク@)をパラメータとして使用します。

リストだけを見るだけで、組み込み関数dir(またはそれに対応するUnixy関数)を呼び出す必要もなく、ただ渡すだけlsです。zshprint

たとえば、

print -rC1 -- *(^@)

printそのコラムを見て彼らはr驚きましたか1 C

箱舟修飾子を使うM/目次同様にdir -F、これはディレクトリでのみ機能しますが、

print -rC1 -- *(M^@)

答え3

--ignoreタイプでは動作せず、パターンでは動作します。たとえば、ファイルがある場合:

$ ls 
a.txt b.dat c.txt d.dat
$ ls --ignore='*.txt'
b.dat d.dat

シンボリックリンクをフィルタリングする簡単な方法はありませんが、次のことを試すことができます。grep

ls -F | grep -v "@"

関連情報