Me gustaría determinar la ubicación de un archivo usando la línea de comandos. He intentado:
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, proporcionado su nombre?
Me gustaría determinar la ubicación de un archivo usando la línea de comandos. He intentado:
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, proporcionado su nombre?
Tratar find ~/ -type f -name "postgis-2.0.0"
en su lugar.
Utilizar .
solo buscará en el directorio actual. ~/
buscará en todo su directorio de inicio (probablemente en el lugar donde lo descargó). Si usaste wget
como root, es posible que esté en otro lugar para que pueda usar /
para buscar en todo el sistema de archivos.
Buena suerte
Yo lo intentaría:
sudo find / -type d -name "postgis-2.0.0"
El . significa buscar solo en el directorio actual, lo mejor es buscar todo desde la raíz si realmente no lo sabe. Además, tipo-f significa buscar archivos, no carpetas. Añadir sudo
le permite buscar en todas las carpetas/subcarpetas.
Su sintaxis para locate
es correcto, pero es posible que tenga que correr
sudo updatedb
primero. Por la razón que sea, nunca tengo buena suerte con locate
aunque.
locate
utiliza una base de datos de archivos y directorios creados por updatedb
. Entonces, si ha descargado un nuevo archivo, hay más posibilidades de que su updatedb
no ha actualizado la base de datos de archivos y directorios. Puedes usar sudo updatedb
antes de usar locate
programa de utilidad.updatedb
generalmente se ejecuta una vez al día por sí solo en sistemas Linux.
Las otras respuestas son buenas, pero encuentro que omito Permission denied
las declaraciones me dan respuestas más claras (omite stderr
s debido a que no se está ejecutando sudo
):
find / -type f -iname "*postgis-2.0.0*" 2>/dev/null
donde:
/
se puede reemplazar con el directorio desde el que desea iniciar la búsquedaf
se puede reemplazar con d
si está buscando un directorio en lugar de un archivo-iname
se puede reemplazar con -name
si desea que la búsqueda distinga entre mayúsculas y minúsculas*
las s en el término de búsqueda se pueden omitir si no desea los comodines en la búsquedaUna alternativa es:
find / -type f 2>/dev/null | grep "postgis-2.0.0"
De esta forma, se devuelven resultados si el término de búsqueda coincide con cualquier parte de la ruta de acceso completa del archivo, p. ej. /home/postgis-2.0.0/docs/Readme.txt
find es una de las herramientas más útiles de Linux/Unix.
Tratar find . -type d | grep DIRNAME
Tratar find . -name "*file_name*"
donde puedes 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 que se distingan entre mayúsculas y minúsculas.
donde puedes cambiar "nombre_archivo"(un archivo que puede comenzar y terminar con lo que sea) al nombre exacto del archivo.
Esto debería simplificar la localización del archivo:
Esto le daría la ruta completa al archivo
tree -f / | grep postgis-2.0.0
Árbol enumera el contenido de los directorios en un formato similar a un árbol. el -f
le dice a tree que proporcione 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 /
recursivamente hacia abajo.Luego enviamos la salida a grep para resaltar nuestra palabra, postgis-2.0.0
Mientras find
command es la forma más sencilla de recorrer recursivamente el árbol de directorios, hay otras formas y, en particular, los dos lenguajes de scripting que vienen con Ubuntu por defecto ya tienen la capacidad de hacerlo.
bash
tiene un muy buen globstar
opción de shell, que permite el recorrido recursivo del árbol de directorios. Todo lo que necesitamos hacer es probar si el elemento en el ./**/*
qué es un archivo y si contiene el texto deseado:
bash-4.3$ for f in ./**/* ;do [ -f "$f" ] && [[ "$f" =~ "postgis-2.0.0" ]] && echo "$f"; done ./testdir/texts/postgis-2.0.0
Perl tiene un módulo Find, que permite realizar un recorrido recursivo del árbol de directorios y, a través de una subrutina, realizar una acción específica sobre ellos. Con un script pequeño, puede recorrer el árbol de directorios, insertar archivos que contengan la cadena deseada en una matriz y luego imprimirla de esta manera:
#!/usr/bin/env perluse strict;use warnings;use File::Find;my @wanted_files;find( sub{ -f $_ && $_ =~ $ARGV[0] && push @wanted_files,$File::Find::name }, ".");foreach(@wanted_files){ print "$_\n"}
Y cómo funciona:
$ ./find_file.pl "postgis-2.0.0" ./testdir/texts/postgis-2.0.0
Python es otro lenguaje de scripting que se usa ampliamente en el mundo de Ubuntu. En particular, tiene os.walk()
módulo que nos permite realizar la misma acción que la anterior: atravesar el árbol de directorios y obtener la lista de archivos que contienen la cadena deseada.
Como de una sola línea, esto se puede hacer de la siguiente manera:
$ python -c 'import os;print([os.path.join(r,i) for r,s,f in os.walk(".") for i in f if "postgis-2.0.0" in i])' ['./testdir/texts/postgis-2.0.0']
El guión completo se vería así:
#!/usr/bin/env pythonimport os;for r,s,f in os.walk("."): for i in f: if "postgis-2.0.0" in i: print(os.path.join(r,i))
$ find . -type f | grep IMG_20171225_*
Dar./03-05--2018/IMG_20171225_200513.jpg
El punto después del comando find
es establecer un punto de partida,
Por lo tanto, la carpeta actual,
"canalizado" (=filtrado) a través del filtro de nombre IMG_20171225_*
el comando ‘localizar’ está bien, solo actualice locatedb primero, usando el comando ’ updatedb`
Si ya está instalado, es posible que el nuevo nombre de archivo ya no sea postgis-2.0.0
. Por lo general, después de las instalaciones a través de administradores de paquetes, los ejecutables estarían en una de las carpetas PATH PATH
, intente which postgis
para ver la ubicación. Si no devuelve nada, solo entonces debe buscar manualmente la ubicación del archivo.