web-dev-qa-db-ja.com

どうすればディレクトリのみの検索を使用できますか

これにより、「Dropnot」のさまざまなサブディレクトリの下にある多数のファイルが見つかります

$ locate Dropnot

justlocateでディレクトリの場所を見つけることはできますか? (「Dropnot」がどのディレクトリにあるか)

したがって、Dropnot/home/me/、それが返される唯一のエントリです。

もしそうなら、最も簡単な/最短の方法は何ですか?

できれば、それを手探りで模索するのではなく、フラグやシンボルを使うのが望ましいですが、私はオプションとして何でも取ります。

たぶん、Dropnot $が行末にあるのでしょうか? (しかし、うまくいきませんでした)。

10
Michael Durrant

locateを使用して、選択したタイプのファイル(ディレクトリなど)を検索するオプションはありませんが、質問の構文Dropnot$を使用して、Dropnotで終わる行を検索できます。そのためには、-eオプションを使用して、POSIX正規表現をオンにする必要があります。

この場合、以下を使用する必要があります。

locate -e Dropnot$

使用しているロケートのバージョンが重要です。私のシステム(Gentoo Linux)には、Secure Locateがあります。

$ locate --version
Secure Locate 3.1 - Released March 7, 2006

utherの回答に--basenameオプションがありません。このオプションは、GNUによって提供されます。findutilsパッケージから検索:

$ ./locate --version
locate (GNU findutils) 4.4.2

GNU Locateでregexpを使用する場合は、-rの代わりに-eスイッチを使用する必要があります。

5
pbm

mlocateをインストールしました。これはRedHatによって配布されるデフォルトであるため、Fedora、RHEL、CentOSで提供されます。 man 1 locateから

-b, --basename
       Match  only  the  base  name  against the specified patterns. This 
       is the opposite of --wholename.

したがって、locate -b '\Dropknot'を実行すると、その文字列が正確に含まれるファイルまたはディレクトリのみが報告されます。

Because \ is a globbing character, this disables the implicit replacement 
of NAME by *NAME*.
10
George M

GNU Locateの場合(他のLocate実装は異なる場合があります):

locate '*/Dropnot'
locate Dropnot | grep '/Dropnot$'

引数にワイルドカードがない場合、locateは、指定された検索語を部分文字列として含むパスを検索します。引数が1つ以上のワイルドカード文字を含むシェルパターンである場合、locateは完全に一致するものを探します。最後に/Dropnotを出力したくない場合:

locate -0 '*/Dropnot' | xargs -0 -n1 dirname
locate Dropnot | sed -n 's:/Dropnot$::p'

なぜ誰もそのようなことを提案しなかったのか分かりません:

for i in $(locate MYDIR); do [ -d "$i" ] && echo $i; done

これは、ロケート文字列のいずれかがディレクトリであるかどうかを確認して出力するだけです

0
cy8g3n

Slackwareはデフォルトでslocateを使用します。これにはオプションrを使用した正規表現検索があります。

locate -r '/Dropnot$'

Dropnotという名前のディレクトリを検索します。

これは、例えばnumbered-only Dropnotディレクトリ(Dropnot1、Dropnot2など)の場合:

locate -r '/Dropnot[[:digit:]]\+$'

RedHatを使用している場合は、おそらくSecure Locateではなくmlocateがインストールされています。その場合、-eオプションはなく、基本的な正規表現を使用して検索するには、-rまたは--regexpを使用する必要があります。

0
Jistanidiot