ディレクトリリストからシンボリックリンクを除外したいと思います。私は次のコマンドを使用しています:
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
です。zsh
print
たとえば、
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 "@"