検索に使用していますsudo find / -name gcc*
。複数のディレクトリを返しますが、私はファイルだけを望んでいます。しかし、追加すると、-type f
私が望むシンボリックリンクはリストされません。ディレクトリをフィルタリングしてシンボリックリンクを維持する方法は?
また、ワイルドカードを使用してもサポートされていないワイルドカード*
というファイルをリストできないことがわかりましたgcc-10
。find
これを行うことができる他のユーティリティはありますか?
ベストアンサー1
GNUの実装では、次のことがfind
できます。
find / -name 'gcc*' -xtype f
type
シンボリックリンクの確認後にファイルを確認するために使用されます。
再帰グローブを使用すると、zsh
次のような効果が得られます。
print -rC1 /**/gcc*(-.)
ここで、glob修飾子はシンボリックリンク確認後に-
次の修飾子(ここでは同じ)が適用されるようにします.
。-type f
可能であれば、すでに構築されているデータベースからファイルを検索するため、通常はより速い方法を代わりにfind
使用できます。locate
locate -b0 'gcc*' | find -files0-from - -prune -xtype f
GNU find
4.9以降を使用すると、locate
名前がaseで始まるすべてのファイルが一覧表示され、b
gcc
find
一般ファイルシンボリックリンクが解決された後。
またはglobと同じですzsh
。
print -rC1 ${(0)^"$(locate -b0 'gcc*')"}(N-.)
-f
Perlは演算子[
/をtest
テストできるため、これにも役立ちます。定期的なデフォルトでは、シンボリックリンクはファイルとして解決されるため、次のことができます。
locate -b0 'gcc*' | perl -l -0ne 'print if -f'
これにより、ファイルシステム全体をクロールすることなくほぼ即座に結果を得ることができます(ただし、locate
最後のデータベース更新以降に追加された一部のファイルは失われる可能性があります)。