¿Cómo puedo usar localizar solo para un directorio

10

Esto encuentra una gran cantidad de archivos que están bajo varios subdirectorios de "Dropnot"

$ locate Dropnot

¿Puedo encontrar solo la ubicación del directorio locate? (en qué directorio está "Dropnot")

Entonces, si Dropnotestá adentro /home/me/, esa es la única entrada que se devuelve.

Si es así, ¿cuál es el camino más simple / más corto?

Preferiblemente a través de una bandera o un símbolo en lugar de aniquilarlo, etc., pero tomaría cualquier cosa como una opción.

¿Quizás algún tipo de Dropnot $ para el final de la línea? (pero no funcionó)

Michael Durrant
fuente

Respuestas:

5

No hay una opción para locatebuscar el tipo de archivo seleccionado (como el directorio), pero puede usar la sintaxis de su pregunta Dropnot$para encontrar líneas que terminen en Dropnot. Para eso debe usar la -eopción de localizar para activar la expresión regular POSIX.

En este caso deberías usar:

locate -e Dropnot$

Es importante qué versión de localizar tiene. En mi sistema (Gentoo Linux) tengo Secure Locate:

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

en el que no hay --basenameopción de utherla respuesta de. Esta opción es proporcionada por GNU Locate desde el paquete findutils:

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

Si desea usar regexp con GNU Locate, debe usar -rswitch en su lugar -e.

pbm
fuente
1
no es la -eopcion only print entries for currently existing files?
phuclv
10

He mlocateinstalado Es el predeterminado distribuido por RedHat, por lo que estará en Fedora, RHEL, CentOS. Desdeman 1 locate

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

Entonces, si ejecuta locate -b '\Dropknot', solo informará archivos o directorios con exactamente esa cadena.

Because \ is a globbing character, this disables the implicit replacement 
of NAME by *NAME*.
George M
fuente
locate -b /Dropnottrabajado
Michael Durrant
4

Con la localización de GNU (otras implementaciones de localización pueden diferir):

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

Cuando no hay comodines en el argumento, locatebusca una ruta que tenga el término de búsqueda especificado como una subcadena. Cuando el argumento es un patrón de shell que contiene uno o más caracteres comodín, locatebusca una coincidencia completa. Si no desea generar el /Dropnotal final:

locate -0 '*/Dropnot' | xargs -0 -n1 dirname
locate Dropnot | sed -n 's:/Dropnot$::p'
Gilles 'SO- deja de ser malvado'
fuente
0

Si estás en RedHat, probablemente tengas instalado mlocate, no Secure Locate. En ese caso, no hay una opción -e y debe usar -r o --regexp para buscar usando expresiones regulares básicas.

Jistanidiot
fuente
0

Slackware usa slocatede forma predeterminada, que tiene una búsqueda de expresiones regulares con la opción r :

locate -r '/Dropnot$'

buscará los directorios con nombre Dropnot.

Esto sería buscar por ejemplo, para numeradas -sólo los Dropnotdirectorios (Dropnot1, Dropnot2, etc.):

locate -r '/Dropnot[[:digit:]]\+$'
Skippy le Grand Gourou
fuente
0

No sé por qué nadie propuso algo así:

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

Esto solo comprueba si alguna de las cadenas de localización es un directorio y lo imprime

cy8g3n
fuente