J'utilise Bionic Beaver et je ne trouve aucun de mes fichiers dans l'interface graphique standard (est-il toujours appelé Unity?). Si je vais dans un dossier, il semble pouvoir retrouver ces fichiers par la suite, mais cela ne sert à rien pour les fichiers dont je ne connais pas déjà l'emplacement. Ce sont en fait des problèmes distincts pour effectuer une recherche à partir du dock à l'aide de META et à l'aide de Ctrl + F à partir du navigateur de fichiers (est-ce toujours appelé Nautilus?)
Je pense qu'il existe des versions antérieures de cette question, mais je n'ai encore rien trouvé qui semble s'appliquer à ma configuration.
Les fichiers sont indexés pour la commande locate
, mais elle est normalement mise à jour tous les jours. Ainsi, tout nouveau fichier créé aujourd'hui n'apparaîtra que demain. J'ai contourné ce manque en plaçant Sudo updatedb
comme un travail cron qui s'exécute toutes les 15 minutes (son exécution ne prend que quelques secondes).
La commande locate
se comporte comme si des caractères génériques étaient utilisés:
$ 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
J'ai préfixé la commande locate
par la commande time
afin que vous puissiez voir à quel point il effectue des recherches éblouissantes sur les noms de fichiers indexés et les noms de répertoires avec des caractères génériques implicites.
La sortie locate
est plutôt clairsemée. J'ai donc créé un alias llocate
pour formater correctement la sortie ( . `mais plus agréable? ):
$ 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
Remarquez comment l'en-tête vous indique la dernière fois que les fichiers ont été indexés. Si vous ne trouvez pas le fichier que vous recherchez et s'il a été créé avant cette heure, exécutez simplement Sudo updatedb
.
La commande time
est à nouveau utilisée. Vous pouvez donc constater que l'utilisation de llocate
est légèrement plus lente que locate
sauf si un nombre considérable de résultats est renvoyé.
locate
Interface graphique glocate
Bien que locate
soit une commande CLI, j'ai créé une interface graphique à l'aide de zenity
. Il s'agit d'une interface initiale "sans fioritures" qui pourrait être améliorée en utilisant yad
à la place.
Cet écran apparaît au démarrage de glocate
:
Vous pouvez entrer des noms de répertoire et des noms de fichiers en tout ou en partie.
glocate
prend environ une seconde pour afficher les résultats dans la plupart des cas:
Voici le script bash que vous pouvez créer en utilisant:
Sudo -H gedit /usr/local/bin/glocate
Puis copiez et collez la ligne suivante:
#!/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
Enregistrez le fichier et quittez gedit
.
Marquez le script comme exécutable en utilisant:
Sudo chmod a+x /usr/local/bin/glocate
Si vous souhaitez créer un raccourci sur le bureau, voir: Un moyen simple de créer un raccourci sur le bureau?
Pour appeler le script depuis le terminal, utilisez simplement: glocate
.
Dans un environnement de bureau graphique, vous pouvez essayer Recoll , un outil puissant qui permet de rechercher des noms de fichier ainsi que leur contenu.
Une fois installé, consultez man recoll
ou un didacticiel via Internet pour en savoir plus.
En règle générale, la commande recoll
lance l'interface graphique permettant d'interroger la base de données Recoll.
Lors de la première exécution, récoll créera la configuration utilisateur qui peut être personnalisée avant de commencer la première indexation.
Lien: Recoll est un outil de recherche de texte intégral de burea
glocate
est une toute nouvelle interface graphique pour locate
réalisée par @ WinEunuuchs2Unix et décrite dans une autre réponse ici. Il est très basique et facile à utiliser .
Dans un écran de texte ou une fenêtre de terminal, vous pouvez utiliser les lignes de commande avec find
et grep
.
find
est un outil très puissant pour trouver des fichiers. Exemples:
find / -iname "*autostart*" # to search everywhere
find ~ -iname "*autostart*" # to search in your home directory
Utilisez des autorisations élevées, Sudo find ...
s'il existe des répertoires, que vous n'êtes pas autorisé à rechercher en tant qu'utilisateur standard. Voir man find
ou un tutoriel via Internet pour en savoir plus.
grep
est un outil très puissant pour rechercher des chaînes de texte dans les fichiers (recherche du contenu du fichier). Exemples
grep 'alias' ~/.bashrc
Voir man grep
ou un tutoriel via Internet pour en savoir plus.
locate
est un outil rapide pour rechercher des fichiers lorsqu'il dispose d'une base de données mise à jour. Voir man locate
ou un tutoriel via Internet pour en savoir plus.
Mettez à jour la base de données pour locate
avec
Sudo updatedb
et s'il n'inclut pas de système de fichiers secondaire monté dans /media
, vous pouvez modifier le fichier de configuration pour l'inclure (ou déplacer le point de montage vers /mnt
, mais cela peut entraîner des problèmes chemins codés en dur),
cd /etc
Sudo cp -p updatedb.conf updatedb.conf.bak
Sudo nano updatedb.conf