Me gustaría determinar la ubicación de un archivo usando la línea de comandos. Yo he tratado:
find . -type f -name "postgis-2.0.0"
y
locate postgis-2.0.0
en vano. ¿Cuál es el comando para determinar el directorio del archivo, dado su nombre?
command-line
directory
find
Sam007
fuente
fuente
locate
comando está bien, solo actualice el ubicaciónb primero, usando el comandoupdatedb
postgis-2.0.0
. Por lo general, después de las instalaciones a través de los administradores de paquetes, los ejecutables estarían en una de las$PATH
carpetas, intentewhich postgis
ver la ubicación. Si no devuelve nada, solo entonces debe buscar manualmente la ubicación del archivo.Respuestas:
Intenta en su
find ~/ -type f -name "postgis-2.0.0"
lugar.El uso
.
solo buscará en el directorio actual.~/
buscará en todo su directorio de inicio (probablemente donde lo descargó). Si lo usówget
como root, es posible que pueda estar en otro lugar para poder/
buscar en todo el sistema de archivos.Buena suerte
fuente
wget
como root, así que/
funcionó, graciasLo intentaré:
Los . significa buscar solo en el directorio actual, es mejor buscar todo desde la raíz si realmente no lo sabe. Además, escriba -f significa buscar archivos, no carpetas. Agregar le
sudo
permite buscar en todas las carpetas / subcarpetas.Su sintaxis
locate
es correcta, pero es posible que deba ejecutarprimero. Sin
locate
embargo , por alguna razón, nunca tengo buena suerte .locate
utiliza la base de datos de archivos y directorios creados porupdatedb
. Entonces, si ha descargado un nuevo archivo, hay más posibilidades de queupdatedb
no haya actualizado la base de datos de archivos y directorios. Puede usarsudo updatedb
antes de usar ellocate
programa de utilidad.updatedb
generalmente se ejecuta una vez al día por sí solo en sistemas Linux.fuente
find es una de las herramientas más útiles de Linux / Unix.
Tratar
find . -type d | grep DIRNAME
fuente
Las otras respuestas son buenas, pero creo que omitir
Permission denied
declaraciones me da respuestas más claras (omitestderr
s debido a que no se ejecutasudo
):dónde:
/
se puede reemplazar con el directorio desde el que desea comenzar su búsquedaf
puede reemplazarsed
si está buscando un directorio en lugar de un archivo-iname
puede reemplazarse-name
si desea que la búsqueda distinga entre mayúsculas y minúsculas*
s en el término de búsqueda se pueden omitir si no desea los comodines en la búsquedaUna alternativa es:
De esta forma, se devuelven resultados si el término de búsqueda coincide en cualquier lugar de la ruta completa del archivo, por ejemplo
/home/postgis-2.0.0/docs/Readme.txt
fuente
-regex
e-iregex
interruptores para buscarRegular Expressions
, que también encontrarían las rutas mencionadas. La sugerencia de encontrar cualquier elemento que sea un archivo (-type f
)grep
es más costoso en recursos.Permission denied
sucede cuando el usuario no tiene acceso a archivos o carpetas, el usosudo
antes de find permitirá que find vea todos los archivos.-wholename
o en-iwholename
lugar de canalizar agrep
.Tratar
find . -name "*file_name*"
donde puede cambiar '.' (busque en el Directorio actual) a '/' (busque en todo el sistema) o '~ /' (busque en el Directorio de inicio).
donde puede cambiar "-name" a "-iname" si no desea distinguir entre mayúsculas y minúsculas.
donde puede cambiar " nombre_archivo " (un archivo que puede comenzar y terminar con lo que sea) al nombre exacto del archivo.
fuente
Esto debería simplificar la localización del archivo:
Esto le daría la ruta completa al archivo
Tree enumera el contenido de los directorios en un formato similar a un árbol. el
-f
árbol le dice que dé la ruta completa al archivo. Como no tenemos idea de su ubicación o ubicación principal, es bueno buscar desde la raíz del sistema de archivos de forma/
recursiva hacia abajo. Luego enviamos la salida a grep para resaltar nuestra palabra,postgis-2.0.0
fuente
Si bien el
find
comando es la forma más simple de atravesar recursivamente el árbol de directorios, existen otras formas y, en particular, los dos lenguajes de script que vienen con Ubuntu de manera predeterminada ya tienen la capacidad de hacerlo.golpetazo
bash
tiene unaglobstar
opción de shell muy agradable , que permite un recorrido recursivo del árbol de directorios. Todo lo que tenemos que hacer es probar si el elemento en la./**/*
expansión es un archivo y si contiene el texto deseado:Perl
Perl tiene el módulo Buscar, que permite realizar un recorrido recursivo del árbol de directorios y, a través de una subrutina, realizar acciones específicas sobre ellos. Con un pequeño script, puede atravesar el árbol de directorios, insertar archivos que contienen la cadena deseada en la matriz y luego imprimirlo de la siguiente manera:
Y como funciona:
Pitón
Python es otro lenguaje de script que se usa ampliamente en el mundo de Ubuntu. En particular, tiene un
os.walk()
módulo que nos permite realizar la misma acción que antes: recorrer el árbol de directorios y obtener una lista de los archivos que contienen la cadena deseada.Como una línea, esto se puede hacer así:
El guión completo se vería así:
fuente
$ find . -type f | grep IMG_20171225_*
Da
./03-05--2018/IMG_20171225_200513.jpg
el DOT después del comando
find
para establecer un punto de partida, por lotanto, la carpeta actual,
"canalizada" (= filtrada) a través del filtro de nombre
IMG_20171225_*
fuente