¿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ó)

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.


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*.

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'

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.


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:]]\+$'

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.