指定したディレクトリ内でLocateコマンドを使用するにはどうすればよいですか?


16

locateLinuxでコマンドを使用しています。私の現在の使用法では、ファイルシステム全体を検索します。特定のディレクトリ内でのみ検索したい。これどうやってするの?


TLDR:locate指定されたディレクトリ内で検索を行うためのターミナルエイリアスは次のとおりです。alias my_locate="updatedb -U /path/to/yourdir -o /path/to/your_dir_locate.db; locate -d /path/to/dir_locate.db " エイリアスが有効になったら、ターミナルタイプmy_locate *foo*でレースに参加します。データベースの更新を連結し、コロン文字を使用してデータベースを連結することで検索を検索できます。rtfm:linux.die.net/man/8/updatedb
Eric

回答:


11

別のアプローチは、パターンマッチングを使用することですlocate

locate '/some/directory/*filename*'

以下のコマンドの出力を比較します。

$ locate tmpfile
/usr/lib64/perl5/auto/POSIX/tmpfile.al
/usr/share/man/fr/man3/tmpfile.3.gz
/usr/share/man/ja/man3/tmpfile.3.gz
/usr/share/man/man3/tmpfile.3.gz
/usr/share/man/man3p/tmpfile.3p.gz
$
$ locate '/usr/lib64/*tmpfile*'
/usr/lib64/perl5/auto/POSIX/tmpfile.al
$ 

locate /usr/lib*tmpfile* 同じ結果が得られます。


3
+1これは正解です。ワイルドカードを含めると、境界が固定されることに注意してください。上記の例で$ locate '/usr/lib64/*tmpfile'は、結果は返されません。
-Xofer

あなたは、単純なワイルドカードが提供できる以上に制御したい場合は、いつでも、パイプの結果ができlocategrep
ラダダダダ14年

5

以下を使用して、特定のディレクトリのslocateデータベースを作成します。

updatedb -U /path/to/directory

そして検索:

locate <search_string>

更新

これは私のGentooシステムでは正常に機能しますが、CentOSには-Uオプションが含まれていません。だから、代わりに以下を試すことができます:

以下を使用してデータベースを構築します。

# updatedb -U /path/to/dir -o dir_locate.db

および検索:

# locate -d dir_locate.db <search_string>

3
「locate -U」は無効なオプションエラーをスローします...「updatedb -U」を意味すると思いますか?また、別のディレクトリを検索する場合は、mlocate.dbの再構築(updatedb)が必要です。
ガーパー

ああ、私のGentooでは正常に動作しますが、CentOSにはこのオプションが含まれていません。
量子

反対票?コメントをお願いします。
量子

次のようなエラーが発生する場合は、linuxで一般ユーザーとしてupdatedbコマンドを使用updatedb: can not change group of file 'db.db.kHhzFz' to 'mlocate': Operation not permittedする方法を確認してください。
ケノーブ14年

2

私が考えることができる最も簡単な答えは

locate search_term | grep "/specified/directory"

より良い解決策は、「find」とそのパスオプションを使用することです。


0

最も簡単な方法は、次の例のようになります。

updatedb -o ~/tmp.db -l0 -U $PWD
locate   -d ~/tmp.db "foo"

変更$PWDあなたの特定のディレクトリに。

上記の例では、特定のディレクトリに対してのみローカルデータベースが作成されます。

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