Поиск бесполезен. Как я могу вынудить это индексировать мой жесткий диск (2018)

Я выполняю Бионического Бобра и не могу найти какой-либо из своих файлов в стандарте (это все еще называют Единицей?) GUI. Если я перехожу к папке, это, кажется, может найти те файлы позже, но это бесполезно для файлов, из которых я уже не знаю местоположение. Это на самом деле отдельные проблемы для поиска от прикрепления с помощью META и ища использующий Ctrl+F от файлового браузера (это все еще называют Наутилусом?)

Я полагаю, что существуют более ранние версии этого вопроса, но я не нашел ничего, что, кажется, относится к моей установке все же.

2
задан 23 December 2018 в 22:16

2 ответа

Инструменты GUI

  • В графической настольной среде можно попробовать Recoll, который является мощным инструментом, который может искать содержание файла, а также имена файлов.

    При установке посмотрите man recoll или учебное руководство через Интернет для получения дополнительной информации о нем.

  • glocate совершенно новый GUI для locate сделанный @WinEunuuchs2Unix и описал в другом ответе здесь. Это является очень простым и также простым в использовании.

Инструменты командной строки

На текстовом экране или окне терминала можно использовать командные строки с 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, но это может вызвать проблемы с путями hardcoded),

      cd /etc
      sudo cp -p updatedb.conf updatedb.conf.bak
      sudo nano updatedb.conf
      
2
ответ дан 2 December 2019 в 01:52

Файлы индексируются для locate команда, но обычно это обновляется каждый день так любой новый файл, который Вы создали, сегодня не покажет вплоть до завтра. Я обошел эту нехватку путем помещения sudo updatedb как задание крона, которое работает каждые 15 минут (только требуется несколько секунд для выполнения).

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, я создал переднюю сторону GUI для нее использование zenity. Это - начальная буква "никакие оборки" фронтенд, который мог быть улучшен с помощью yad вместо этого.

Введите до 10 поисковых имен файлов / имена каталогов

Этот экран появляется, когда Вы запускаете glocate:

glocate 1.png

Можно ввести имена каталогов и имена файлов полностью или частично.

Результаты возвращаются в ползунке

glocate занимает приблизительно секунду для отображения результатов в большинстве случаев:

glocate 2.png

Сценарий 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.

Mark сценарий как исполняемое использование:

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

Если Вы хотите создать настольный ярлык, см.: простой способ создать настольный ярлык?

Для вызова сценария от терминала, просто используйте: glocate.

3
ответ дан 2 December 2019 в 01:52

Другие вопросы по тегам:

Похожие вопросы: