Locateを使用してディレクトリを見つける


20

常に名前を知っているファイルを見つけるためにロケートを使用していますが、ロケートは非常に高速で、それが大好きです。最近作成されたファイルの検索は素晴らしいです。通常、最近作成されたファイルは基本的にどこで作成されたかを知っているので、ファイルシステム全体を検索する必要はありません。

しかし、ディレクトリの場所を忘れてしまったとき、findもlocateも理想的ではないようです。

ディレクトリ内のすべてのファイルもロケートに一致するため、ロケートは常に大量の情報を出力します。たとえば、ファイルシステムのどこかにlogという名前のディレクトリを検索していた場合、ログは大量の結果を返します。findで同じことをすると、find / -name log -type d findの実行に数分かかり、読み取りできないフォルダーに遭遇するたびに、あらゆる種類のアクセス許可エラーを吐き出します。

もっと良い方法はありますか?

答え:だから私は他の何かを見つけるまでgrepに固執しています。

locatedir () {
    for last; do true; done
    if [[ $last == *\/* ]]
    then
        locate $@ | grep "${last}\$"
    else
        locate $@ | grep "/${last}\$"
    fi
}

回答:


12

方法(より良い方法があると思う)は、grepを使用して、フォルダー名で終わるパスのみを返すことです。

locate foldername | grep /foldername$

28

次のオプション--regex-r)を使用できますlocate

locate -r '/log$'

はい(+1)。locate独自の組み込み正規表現機能: -rまたは--regex...オプションの全範囲については、以下を参照してください:info
Locate

1
もっと良い方法があるに違いない!
ミスターベン

とても短く、スムーズに動作します。多大な貢献!正規表現
-loved.by.Jesus

'この場合、2つは必要ありません:locate -r /log$十分です。
simlev

5

やってみました:

locate /home/insertusernamehere/*/filename

または

locate file | grep -i '^/home/.*/examplesubdirectory'

またはそのようなバリエーション?


この答えは、それgrepが必要ではないことを示しており、最初に提案されたオプションに見られるように、どちらも正規表現ではありません。
トム

2

ここにあります

locatedir () {
    locate "$*" | while read line
    do 
    if [ -d "$line" ] ; then echo $line ; fi
    done
}

locatedir $*

1
どのような変更を加えたかを説明できれば、他の人にも役立ちます。
ロン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.