web-dev-qa-db-ja.com

「locate」と一致する正規表現

Locateコマンドを使用してホームフォルダー内のファイルを検索しようとしていますが、これを実行しようとすると、結果が得られません。

_locate -i -l 4 --regexp '^\/home\/jack\/[A-Za-z0-9\/\ ]*(My.)*$'
_

私も^\/home\/jack\/^(?!\.)[A-Za-z0-9\/\ ]*(My.)*$を試しましたが、結果も返されません。

それをテストするためだけに私が探しているファイルは_/home/jack/Music/Foals/My Number.flac_です

隠しファイルの結果を検索から除外したいと思います。

8
Jack Jones

これでうまくいくようです。

locate -ir '^/home/jack/\([^.][^/]\+/\)\+My[^/]*$'

マニュアルからの引用:

-i、--ignore-caseパターンを照合するときに大文字と小文字の区別を無視します。

-r、--regexp REGEXP基本的な正規表現REGEXPを検索します。このオプションを使用する場合、PATTERNは許可されませんが、このオプションは複数回指定できます。

6
Graeme

検索の仕組み

locateコマンドが使用するファイルのインデックスは、通常、1日に1回だけ再構築されます。このcronジョブ/etc/cron.daily/mlocateによって作成されます。ですから、あなたのエントリーはおそらくまだそこにはありません。これらのインデックスを手動で再構築する場合は、再実行できます。

$ Sudo /etc/cron.daily/mlocate

検索を使用する

ただし、findなどのコマンドを使用してホームディレクトリ内のファイルを見つける方がよいでしょう。

$ find ~ -iname "[^.]*" | head -10
/home/saml
/home/saml/isql_issue.txt
/home/saml/bbbb
/home/saml/script_name.sh
/home/saml/go_figure_book
/home/saml/go_figure_book/readme.txt
/home/saml/go_figure_book/lstopo.txt
/home/saml/go_figure_book/who_breaks_out.bash
/home/saml/hdat2
/home/saml/hdat2/hdat2_v50.iso

GUIの使用

グラフィカル検索ツールにも興味があるかもしれません。 Catfishと呼ばれるそのようなツールの1つをカバーする、他のU&L Q&Aというタイトルの GTKフロントエンドのLocate を見てください。このツールは、locateデータとfindコマンドの両方を利用できます。

1
slm

別のアプローチを取ることもできます。

locate "My file" | grep '/home/jack' | grep -v '/\.'

何をしようとしているのかわかりません。 -iフラグを使用して大文字と小文字を区別せず、正規表現はあまり具体的ではありません。/home/jackの下にあり、MYMymyを含むすべてのファイルまたはフォルダーを検索する必要があります、またはmYファイル名の任意の場所。もしそうなら、ただ走る

locate -i my | grep '/home/jack' | grep -v '/\.'
1
terdon

これは動作するはずです-非表示になっていないファイルとフォルダのみに一致します:

find /home/jack -name "[^.]*My.*"

さらにシンプル-これは、ディレクトリツリーのどこにも隠しディレクトリがないファイルと一致します。おそらくこれはあなたが望むものです:

for f in /home/jack/**/*My.*
    do echo "$f" # or do any other command
done
0
jayhendren