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


10

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

$ locate Dropnot

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

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

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

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

行末にある種のDropnot $を使用しているのでしょうか?(しかし動作しませんでした)。

回答:


5

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

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

locate -e Dropnot$

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

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

では、の回答には--basename選択肢がありませんuther。このオプションは、findutilsパッケージのGNU Locateによって提供されます。

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

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


1
-eオプションではありませんonly print entries for currently existing filesか?
phuclv 2016

10

私がしている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*.

locate -b /Dropnot働きました
Michael Durrant

4

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'

0

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


0

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

locate -r '/Dropnot$'

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

これは、例えば番号のみのDropnotディレクトリ(Dropnot1、Dropnot2など)を検索します。

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

0

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

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

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

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