J'essaie d'utiliser la commande Locate pour rechercher des fichiers dans mon dossier de départ, mais chaque fois que j'essaie de l'exécuter, je n'obtiens aucun résultat:
locate -i -l 4 --regexp '^\/home\/jack\/[A-Za-z0-9\/\ ]*(My.)*$'
J'ai également essayé ^\/home\/jack\/^(?!\.)[A-Za-z0-9\/\ ]*(My.)*$
mais cela ne donne aucun résultat non plus.
Le fichier que je recherche juste pour le tester est /home/jack/Music/Foals/My Number.flac
Je voudrais exclure les résultats des fichiers cachés de ma recherche.
bash
regular-expression
locate
Jack Jones
la source
la source
locate
. Est-il judicieux de combiner-b
(c'est-à-dire " Ne faire correspondre que le nom de base avec les modèles spécifiés.") Avec un chemin d'accès--regexp
? Pourquoi échappez-vous au/
s?(My.)*
faire?My.*$
travaux. Vous devez vous échapper()
dans les RE de base.--regexp
prend un regex de base. Essayez de passer--regexp
à--regex
(nonp
). La page de manuel indique qu'il--regex
fait une correspondance regex étendue.Réponses:
Cela semble faire l'affaire.
Citations du manuel:
la source
Fonctionnement de Locate
L'index des fichiers que la
locate
commande utilise n'est reconstruit qu'une fois par jour, généralement. Il est construit par cette tâche cron,/etc/cron.daily/mlocate
. Donc, vos entrées ne sont probablement pas encore là. Vous pouvez le réexécuter si vous souhaitez qu'il reconstruise manuellement ces index.Utilisation de find
Cependant, il vaut probablement mieux utiliser une commande telle que
find
pour localiser des fichiers dans votre répertoire personnel.Utilisation d'une interface graphique
Vous pourriez également être intéressé par un outil de recherche graphique. Jetez un œil à cet autre Q&A U&L intitulé: GTK Frontend pour localiser qui couvre un tel outil appelé Catfish. Cet outil peut utiliser à la fois des
locate
données et desfind
commandes.la source
locate
plus rapide quefind
même si je dois faire uneupdatedb
première. Tant que la base de données est déjà raisonnablement à jour sur la plupart des systèmes,updatedb
cela ne prendra pas longtemps. La syntaxe de recherche est probablement plus simple dans ce cas.find
.Vous pouvez également adopter une approche différente:
Je ne sais pas trop ce que vous essayez de faire. Vous utilisez le
-i
drapeau pour le rendre insensible à la casse et votre regex est pas très précis, vous semblez besoin top trouver tous les fichiers ou les dossiers qui sont sous/home/jack
et qui contiennentMY
,My
,my
oumY
ne importe où dans le nom du fichier. Si oui, lancezla source
Cela devrait fonctionner - ne correspond qu'aux fichiers et dossiers non cachés:
encore plus simple - cela correspond aux fichiers qui n'ont pas de répertoires cachés n'importe où dans l'arborescence des répertoires. C'est probablement ce que vous voulez:
la source
locate
, car j'essaie de l'intégrer dans une interface graphique Python pour effectuer une recherche pendant que vous tapez et c'est plus rapide. Mais merci quand même!locate
d'accélérer les résultats. Par exemple:echo /home/jack/**/*My.*