回答:
UPDATE:Locateの正規表現オプションの使用に関する注意事項とLocateの引数に関連するシェルのファイル名展開 ...
SHELL FILENAME EXPANSION
入力するとlocate /bin/b*(引用符がないことに注意してください)、いくつかのことが起こります。
locate、多くの個々のコマンドライン引数に渡されます。 locate 次に、これらの各引数をデータベース内の各ファイルに対してテストし、一致を出力します。 ただし、「locate」には現在の作業ディレクトリの概念がないことに注意してください。データベース内の完全修飾ファイル名に対してのみ引数を照合します。
このことは、両方が一致することを意味/bin/bash し、 /home/user/bin/brackets
あなたがある程度の制御をこのように持っているが、の見つけ正規表現検索より申し出が。Locateのその他のオプションも同様です。
LOCATEの正規表現オプション単純な引数を使用した場合とは異なること
を入力するlocate -r "/bin/b.*"と、。(shell-expanded-args は単純な引数のリストにすぎません)
-rオプションは伝え見つけ正規表現のパターンとして、あなたの引数を処理すること。 locate -r "^/bin/b.*"始まるファイル名を生成します。始まるファイル名生成/ホーム/ユーザー/ binに/ Bを〜/であることに注意してください... ない「引用マーク」によって保護され、したがって、対象となるシェルチルダ拡張変換〜/に/ホーム/ユーザー/ locate -r ~/"bin/b.*"要約:「shell filname expansion」は「regex」とはまったく異なります
元の投稿に戻ります。
locate 通常、データベース全体を標準出力にリストするため、フィルタリングする必要がある特定のディレクトリに限定するには... Locateのオプションを使用してこれを行うことができます。
単なるシェルグロビングではなく、locateの正規表現機能を使用できます...(locate /dir/myfile* シェルグロビングです)...
情報から:-r、--regex
注:-i = caseを無視し
ます。。。。。-r =正規表現
。。。。。〜/は、シェルによって/ home / userに展開されます(〜/が引用符で囲まれていない場合)
。。。。。'\'(バックスラッシュ+スペース、引用符なし)はリテラルのスペースです(シェルの展開を避けるため)。文字列を引用符で囲むことができますが、引用符の外側に〜/を残すようにしてください:~/my\ regexまたは-/"my regex"
例えば。locate -ir ~/".*"la\ bella\ vitaは、locate -ir ~/".*la bella vita"ホームディレクトリ全体を検索し、どこでも発生する「La Bella Vita」を探します。
検索をファイル名だけに制限することもできますが、-bまたは--basename.. を使用します。この場合、正規表現の行の開始^はベース名のみに適用されます...
私は最もよく自分が locate -bir
PS .. Locateは非常に高速であるため、使用したことがありませんfind ...ノーチラス検索を使用していません(遅すぎる)
「locate」を使用して、新しく追加されたものを探している場合は、単にsudo updatedblocateのデータベースを更新するために実行してください...
次のようにgrepにパイプします
$ locate less | grep ^/bin
/bin/bzless
/bin/less
/bin/lessecho
/bin/lessfile
/bin/lesskey
/bin/lesspipe
/bin/zless
編集:他の答えは良いです、私はあなたが見つけるためにパターンを渡すことができるとは知りませんでした。
locateありませんO(log(n))以上の検索locatedbあなたはそれを非正規表現の検索クエリを与えるときに、あなたが使用することができますgrep実行するための正規表現をO(m)すでに減少し、サブの結果を検索します。(n = locatedb[すべてのドライブのファイル]のエントリの総数、m =で一致するエントリの数locatedb)、合計実行複雑度:O(log(n)) + O(m)ここで、mは平均log(n)であるため2*O(log(n))、O(n)実行時とは対照的に、のすべてのエントリに対する正規表現クエリlocatedb。
O(log(n))正規表現検索はO(n)なぜ正規表現検索なのか?dbのエントリの量はそれぞれ同じです。検索アルゴリズムですか?
locate /rootpath/*filenamespec.I を使用したことがありますが、使用できますが、動作するようです。あなたの例を行うには、それはlocate /home/tim/science/*math*
そのような動作findではなく、コマンドを確認することをお勧めしますlocate。構文はになりますfind rootforsearch -name filenamepattern -print。この場合、あなたの例では、find /home/tim/science -name *math* -print検索するデータベースがないので、locateほど高速ではありません...実際にファイルシステムを検索します。実際にファイルを処理する場合は、印刷以外にも使用できる多くのオプションがあります。
locate(などの他のユーティリティを必要grepとしない)それ自体を使用し、正規表現なしで実行するため、最良の回答です(この場合は便利ですが、不要です)。