これにより、「Dropnot」のさまざまなサブディレクトリの下にある多数のファイルが見つかります
$ locate Dropnot
justlocate
でディレクトリの場所を見つけることはできますか? (「Dropnot」がどのディレクトリにあるか)
したがって、Dropnot
が/home/me/
、それが返される唯一のエントリです。
もしそうなら、最も簡単な/最短の方法は何ですか?
できれば、それを手探りで模索するのではなく、フラグやシンボルを使うのが望ましいですが、私はオプションとして何でも取ります。
たぶん、Dropnot $が行末にあるのでしょうか? (しかし、うまくいきませんでした)。
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
スイッチを使用する必要があります。
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*.
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
これは、ロケート文字列のいずれかがディレクトリであるかどうかを確認して出力するだけです
Slackwareはデフォルトでslocate
を使用します。これにはオプションr
を使用した正規表現検索があります。
locate -r '/Dropnot$'
Dropnot
という名前のディレクトリを検索します。
これは、例えばnumbered-only Dropnot
ディレクトリ(Dropnot1、Dropnot2など)の場合:
locate -r '/Dropnot[[:digit:]]\+$'
RedHatを使用している場合は、おそらくSecure Locateではなくmlocateがインストールされています。その場合、-eオプションはなく、基本的な正規表現を使用して検索するには、-rまたは--regexpを使用する必要があります。