Buscar un archivo por nombre mediante la línea de comandos

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 stderrs 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úsqueda
  • f 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
  • el *las s en el término de búsqueda se pueden omitir si no desea los comodines en la búsqueda

Una 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

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

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

Pitón

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.