web-dev-qa-db-ja.com

検索は役に立たない。ハードドライブのインデックスを強制的に作成するには(2018)

Bionic Beaverを実行していますが、標準(まだUnityと呼ばれていますか?)GUIでファイルを見つけることができません。フォルダーに移動すると、後でそれらのファイルを見つけることができるように見えますが、これはまだ場所がわからないファイルには役に立ちません。これらは、METAを使用してドックから検索する場合と、ファイルブラウザーからCtrl + Fを使用して検索する場合の実際には別の問題です(これはまだNautilusと呼ばれますか?)

この質問には以前のバージョンもあると思いますが、セットアップに当てはまると思われるものはまだ見つかりませんでした。

2
jdc

ファイルにはlocateコマンドのインデックスが付けられますが、通常は毎日更新されるため、今日作成した新しいファイルは明日まで表示されません。 Sudo updatedbを15分ごとに実行されるcronジョブとして配置することで、この不足を回避しました(実行に数秒しかかかりません)。

locateコマンドは、ワイルドカードが使用されているかのように動作します。

$ time locate etc/profile
/etc/profile
/etc/profile.d
/etc/profile.d/appmenu-qt5.sh
/etc/profile.d/apps-bin-path.sh
/etc/profile.d/bash_completion.sh
/etc/profile.d/cedilla-portuguese.sh
/etc/profile.d/jdk.csh
/etc/profile.d/jdk.sh
/etc/profile.d/vte-2.91.sh

real    0m0.696s
user    0m0.671s
sys     0m0.024s

locateコマンドの前にtimeコマンドを付けたので、暗黙のワイルドカードを使用して、インデックス付きのファイル名とディレクトリ名の検索がどれほど目まぐるしく行われるかを確認できます。


locate出力はかなりまばらなので、エイリアスllocateを作成して、出力を適切にフォーマットします( ロケート出力を `ll`または` ls -la`のように見せるが、もっと見やすくするには? ):

$ time llocate etc/profile
ACCESS      OWNER  GROUP  SIZE  MODIFIED      NAME (updatdb last ran: 2018-07-01 11:30:05)
-rw-r--r--  root   root   575   Nov 12  2017  /etc/profile
drwxr-xr-x  root   root   4096  Jun  4 17:19  /etc/profile.d
-rw-r--r--  root   root   40    Feb 16  2017  /etc/profile.d/appmenu-qt5.sh
-rw-r--r--  root   root   580   Oct 18  2017  /etc/profile.d/apps-bin-path.sh
-rw-r--r--  root   root   663   May 18  2016  /etc/profile.d/bash_completion.sh
-rw-r--r--  root   root   1003  Dec 29  2015  /etc/profile.d/cedilla-portuguese.sh
-rwxr-xr-x  root   root   301   Feb 20  2013  /etc/profile.d/jdk.csh
-rwxr-xr-x  root   root   299   Feb 20  2013  /etc/profile.d/jdk.sh
-rw-r--r--  root   root   1941  Mar 16  2016  /etc/profile.d/vte-2.91.sh

real    0m0.760s
user    0m0.754s
sys     0m0.020s

ファイルが最後に索引付けされた時間を見出しがどのように示しているかに注目してください。探しているファイルが見つからず、その前に作成されていた場合は、Sudo updatedbを実行してください。

timeコマンドが再び使用されるので、大量の結果が返されない限り、llocateの使用がlocateよりもわずかに遅いことがわかります。


locate GUIフロントエンドglocate

locateはCLIコマンドですが、zenityを使用してGUIフロントを作成しました。これは、最初の「飾り気のない」フロントエンドであり、代わりにyadを使用して改善できます。

最大10個の検索ファイル名/ディレクトリ名を入力します

この画面は、glocateを起動すると表示されます:

glocate 1.png

ディレクトリ名とファイル名の全部または一部を入力できます。

スクロールボックスに返される結果

glocateは、ほとんどの場合、結果を表示するのに約1秒かかります。

glocate 2.png

Bashスクリプト

以下は、使用して作成できるbashスクリプトです。

Sudo -H gedit /usr/local/bin/glocate

次に、次の行をコピーして貼り付けます。

#!/bin/bash

# NAME: glocate
# PATH: /usr/local/bin
# DESC: Provide zenity GUI front end to locate command

# DATE: Dec 24, 2018.

# NOTE: Written for: https://askubuntu.com/questions/1104069/search-is-useless-how-can-i-force-it-to-index-my-hard-drive-2018/1104112#1104112

Init () {
    # Get date `Sudo updatedb` was last run
    LastRun=$(stat --printf=%y /var/lib/mlocate/mlocate.db | sed 's/\.[^\n]*//')
    SearchMax=10    # Search for up to 10 filenames or directories at once
}

GetSearchNames () {

    SearchNames=$(zenity \
        --title "glocate - updatedb last run: $LastRun" \
        --text '<span foreground="blue" font="14">Enter up to 10 search names</span>' \
        --forms --width=800 --height=480 \
        --add-entry="Search 1" --add-entry="Search 2" --add-entry="Search 3" \
        --add-entry="Search 4" --add-entry="Search 5" --add-entry="Search 6" \
        --add-entry="Search 7" --add-entry="Search 8" --add-entry="Search 9" \
        --add-entry="Search 10" 2>/dev/null)

    Action="$?" # Glitch: When ESC pressed or Cancel clicked result is 0?
    # echo "Action: $Action" # Remove leading # to debug

    # Zenity not returning array like yad would. Build array manually
    SearchArr=() # Reset array
    for (( i=1; i<=$SearchMax; ++i)) ; do
        Field="$(echo "$SearchNames"| cut -d '|' -f $i)"
        [[ $Field != "" ]] && SearchArr+=("$Field")
    done

    # Click OK without search names?
    CharacterCount=$(wc -c <<< "${SearchNames[@]}")
    # echo "CharacterCount: $CharacterCount" # Remove leading # to debug
    # if [[  "$Action" == 0 && "$CharacterCount" == "$SearchMax" ]] ; then
    if [[ "$CharacterCount" -le "$SearchMax" ]] ; then
        zenity  --error --title="glocate" \
                --text="No search names entered. Program will end." \
                2>/dev/null
        Action=99
    fi
    return "$Action"  # 0 = Proceed with search, anything else = quit.
}

DisplaySearch () {

    Result=$(locate "${SearchArr[@]}" )

    zenity \
        --title "locate search results" \
        --text '<span foreground="blue" font="14">Scroll to see more results</span>' \
        --list --separator="$IFS" --width=800 --height=480 \
        --hide-header --column "Directory and filenames" \
        "${Result[@]}" 2>/dev/null
}

Main () {

    Init
    while GetSearchNames ; do DisplaySearch ; done

}

Main

ファイルを保存して、geditを終了します。

次を使用して、スクリプトを実行可能としてマークします。

Sudo chmod a+x /usr/local/bin/glocate

デスクトップショートカットを作成する場合は、以下を参照してください。 デスクトップショートカットを作成する簡単な方法?

端末からスクリプトを呼び出すには、単にglocateを使用します。

3

GUIツール

  • グラフィカルデスクトップ環境では、Recollを試すことができます。これは、ファイル名とファイルコンテンツを検索できる強力なツールです。

    インストールしたら、man recollまたはインターネット経由のチュートリアルを参照して詳細を確認してください。

    • 通常、recollコマンドはRecollデータベースを照会するためのグラフィカルユーザーインターフェイスを起動します。

    • 最初の実行時に、recollは最初のインデックス作成を開始する前にカスタマイズできるユーザー構成を作成します。

    • リンク: Recollはデスクトップの全文検索ツールです

  • glocateは@ WinEunuuchs2Unixが作成したlocateの新しいGUIであり、別の回答で説明されています。それは非常に基本的であり、また使いやすいです。

コマンドラインツール

テキスト画面またはターミナルウィンドウでは、findおよびgrepでコマンドラインを使用できます。

  • findは、ファイルを見つけるための非常に強力なツールです。例:

    find / -iname "*autostart*"  # to search everywhere
    
    find ~ -iname "*autostart*"  # to search in your home directory
    

    通常のユーザーとして検索することを許可されていないディレクトリがある場合は、Sudo find ...の昇格されたアクセス許可を使用します。詳細については、man findまたはインターネット経由のチュートリアルを参照してください。

  • grepは、ファイル内のテキスト文字列を検索するための非常に強力なツールです(ファイルコンテンツを検索します)。例

    grep 'alias' ~/.bashrc
    

    詳細については、man grepまたはインターネット経由のチュートリアルを参照してください。

  • locateは、更新されたデータベースがある場合にファイルを見つけるための高速ツールです。詳細については、man locateまたはインターネット経由のチュートリアルを参照してください。

    • locateのデータベースを更新します

      Sudo updatedb
      

      /mediaにマウントされているセカンダリファイルシステムが含まれていない場合は、構成ファイルを編集してそれを含めることができます(またはマウントポイントを/mntに移動しますが、ハードコードされたパス)、

      cd /etc
      Sudo cp -p updatedb.conf updatedb.conf.bak
      Sudo nano updatedb.conf
      
2
sudodus