Je me demandais comment limiter la plage de recherche de "localiser" à un répertoire?
Par exemple, comment trouver des fichiers/répertoires avec la chaîne "maths" dans leurs noms sous un répertoire "/ home/tim/science /"?
Merci et salutations!
UPDATE: remarque sur l'utilisation de l'option de regex de Locate par rapport au shell extension de nom de fichier par rapport aux arguments de localisation ...
Shell FILENAME EXPANSION
Lorsque vous tapez locate /bin/b*
(notez qu'il n'y a pas de guillemets), plusieurs événements se produisent.
locate
sous forme d'arguments individuels en ligne de commande.locate
teste ensuite chacun de ces arguments contre chacun des fichiers de sa base de données et génère les correspondances.Notez cependant que 'localiser' n'a aucun concept du répertoire de travail actuel. Il ne fait que comparer vos arguments avec les noms de fichier qualifiés dans sa base de données.
Cela signifie qu'il correspondra à la fois à /bin/bash
et à /home/user/bin/brackets
Vous avez un certain degré de contrôle de cette façon, mais recherchez recherche regex offre plus; comme le font d'autres options de localisation.
LOCATE'S REGEX OPTION
Lorsque vous tapez locate -r "/bin/b.*"
, il se produit autre chose que des arguments simples. (Shell-expand-args ne sont qu'une liste d'arguments simples)
-r
indique à localiser de traiter votre argument comme un motif d'expression régulière.locate -r "^/bin/b.*"
produit des noms de fichiers commençant par /bin/b ... eg2. locate -r ~/"bin/b.*"
produit des noms de fichier commençant par /home/utilisateur/bin/b .. Notez que le ~/est pas protégé par des "guillemets" et est donc soumis à Shell tilde-expansion qui convertit ~/en/home/utilisateur /Résumé: "L'expansion du nom de fichier du shell" est assez différente de "regex"
Revenons maintenant au message d'origine:
locate
liste généralement toute la base de données sur stdout, donc pour la limiter à un répertoire particulier, vous devez la filtrer ... Vous pouvez le faire via les options de localisation.
Vous pouvez utiliser la capacité regex de Locate plutôt que de simplement Shell-globbing ... (locate /dir/myfile*
est Shell-globbing) ...
De info localise: -r
, --regex
note: -i = ignorer la casse
. . . . . -r = regex
. . . . . ~/sera étendu par le shell à/home/user (lorsque ~/n'est pas entre guillemets)
. . . . . '\' (barre oblique + espace; pas de guillemets) est un espace littéral (pour éviter le développement du shell). Vous pouvez mettre la chaîne entre guillemets, mais veillez à laisser le ~/ en dehors des guillemets: ~/my\ regex
ou -/"my regex"
par exemple. locate -ir ~/".*"la\ bella\ vita
est identique à locate -ir ~/".*la bella vita"
et recherche dans tout votre répertoire personnel la présence de "La Bella Vita" n'importe où.
Vous pouvez également limiter la recherche au nom de fichier mais en utilisant le -b
ou le --basename
.. auquel cas le début de la ligne regex ^
s'applique à seulement le nom de base ...
Je me retrouve le plus souvent avec locate -bir
PS .. Locate
est si rapide, que j’ai jamais utilisé find
... ni ai-je utilisé la recherche en nautile (trop lente)
Avec 'localiser', si vous recherchez quelque chose qui vient d'être ajouté, lancez simplement Sudo updatedb
pour actualiser la base de données de Locate ... (mais si vous l'avez récemment ajoutée, vous savez probablement où elle se trouve:) ....
Dirigez-le vers grep, comme ceci
$ locate less | grep ^/bin
/bin/bzless
/bin/less
/bin/lessecho
/bin/lessfile
/bin/lesskey
/bin/lesspipe
/bin/zless
Edit: L'autre réponse est meilleure, je ne savais pas que vous pouvez transmettre un motif à localiser.
Vous pouvez utiliser locate /rootpath/*filenamespec
. Je ne l'avais pas essayé auparavant, mais cela semble fonctionner. Pour faire votre exemple, ce serait locate /home/tim/science/*math*
Vous voudrez peut-être examiner la commande find
plutôt que locate
pour ce type de comportement. La syntaxe serait find rootforsearch -name filenamepattern -print
. Dans ce cas, votre exemple nécessiterait find /home/tim/science -name *math* -print
. Pas aussi rapide que localiser car il n'y a pas de base de données à rechercher ... il recherche en fait le système de fichiers. Vous pouvez également utiliser de nombreuses options autres que l'impression, si vous souhaitez réellement utiliser le fichier.
Pour moi le plus pratique est
cd /home/tim/science
locate math | grep `pwd`