Comment puis-je utiliser la localisation uniquement pour un répertoire


10

Cela trouve un grand nombre de fichiers qui se trouvent dans divers sous-répertoires de "Dropnot"

$ locate Dropnot

Puis-je trouver uniquement l'emplacement du répertoire avec locate? (dans quel répertoire "Dropnot" se trouve)

Donc, si Dropnotest dans /home/me/, c'est la seule entrée qui est retournée.

Si oui, quel est le moyen le plus simple / le plus court?

De préférence à travers un drapeau ou un symbole plutôt que de le canaliser et de le chercher, etc., mais je prendrais n'importe quoi en option.

Peut-être une sorte de Dropnot $ pour la fin de la ligne? (mais n'a pas fonctionné).

Réponses:


5

Il n'y a pas d'option à utiliser locatepour trouver le type de fichier sélectionné (comme le répertoire), mais vous pouvez utiliser la syntaxe de votre question - Dropnot$pour trouver les lignes qui se terminent par Dropnot. Pour cela, vous devez utiliser l' -eoption pour localiser pour activer l'expression régulière POSIX.

Dans ce cas, vous devez utiliser:

locate -e Dropnot$

Il est important de savoir quelle version de Locate vous avez. Dans mon système (Gentoo Linux), j'ai Secure Locate:

$ locate --version
Secure Locate 3.1 - Released March 7, 2006

dans laquelle il n'y a pas d ' --basenameoption dans utherla réponse de. Cette option est fournie par GNU Locate à partir du paquet findutils:

$ ./locate --version
locate (GNU findutils) 4.4.2

Si vous souhaitez utiliser regexp avec GNU Locate, vous devez utiliser -rplutôt switch -e.


1
n'est pas l' -eoption only print entries for currently existing files?
phuclv

10

J'ai mlocateinstallé. C'est la distribution par défaut de RedHat, donc ce sera sur Fedora, RHEL, CentOS. Deman 1 locate

-b, --basename
       Match  only  the  base  name  against the specified patterns. This 
       is the opposite of --wholename.

Donc, si vous exécutez locate -b '\Dropknot', il ne rapportera que les fichiers ou répertoires avec exactement cette chaîne.

Because \ is a globbing character, this disables the implicit replacement 
of NAME by *NAME*.

locate -b /Dropnottravaillé
Michael Durrant

4

Avec GNU Locate (les autres implémentations de Locate peuvent différer):

locate '*/Dropnot'
locate Dropnot | grep '/Dropnot$'

Lorsqu'il n'y a pas de caractère générique dans l'argument, locaterecherche un chemin d'accès ayant le terme de recherche spécifié comme sous-chaîne. Lorsque l'argument est un modèle de shell contenant un ou plusieurs caractères génériques, locaterecherche une correspondance complète. Si vous ne voulez pas sortir le /Dropnotà la fin:

locate -0 '*/Dropnot' | xargs -0 -n1 dirname
locate Dropnot | sed -n 's:/Dropnot$::p'

0

Si vous êtes sur RedHat, vous avez probablement installé mlocate et non Secure Locate. Dans ce cas, il n'y a pas d'option -e et vous devez utiliser -r ou --regexp pour effectuer une recherche à l'aide d'expressions régulières de base.


0

Slackware utilise slocatepar défaut, qui a une recherche regex avec option r :

locate -r '/Dropnot$'

recherchera les répertoires nommés Dropnot.

Ceci recherche par exemple pour les numéros -Seulement Dropnotrépertoires (Dropnot1, Dropnot2, etc.):

locate -r '/Dropnot[[:digit:]]\+$'

0

Je ne sais pas pourquoi personne n'a proposé quelque chose comme ça:

for i in $(locate MYDIR); do [ -d "$i" ] && echo $i; done

Cela vérifie simplement si l'une des chaînes de localisation est un répertoire et l'imprime

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.