Cómo encontrar archivos y directorios en Linux

En los sistemas operativos Linux, el comando de búsqueda se puede usar para buscar archivos y directorios en su computadora. Para continuar, seleccione un enlace de la siguiente lista o revise cada sección en orden.

Nota: Para usar Buscar, comience abriendo una sesión de terminal para acceder a la línea de comandos.

Funcionalidad básica de encontrar.

Ejecutar la búsqueda sin ninguna opción producirá una lista de cada archivo y directorio dentro y debajo del directorio de trabajo. Por ejemplo, si su directorio de trabajo es / home / hope / Documents, ejecutar find generará lo siguiente:

  • Cada archivo en / home / hope / Documents .
  • Todos los subdirectorios en / home / hope / Documents .
  • Cada archivo en cada uno de esos subdirectorios.

Vamos a verlo en acción. Primero, revisemos nuestro directorio de trabajo usando el comando pwd:

pwd

 / inicio / esperanza / Documentos 

Ahora vamos a ejecutar encontrar sin ninguna opción:

encontrar

 . ./images ./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG. /images/memes/picard.jpg ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./ hp-fanfic / dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

En este ejemplo, vemos un total de diez archivos y cuatro subdirectorios en y debajo de nuestra carpeta Documentos .

Observe que la salida comienza con un solo punto, que representa el directorio de trabajo. Ejecutar la búsqueda sin opciones es lo mismo que especificar que la búsqueda debería comenzar en el directorio de trabajo, como esto:

encontrar .

El ejemplo anterior es la forma "adecuada" de usar find . Si intenta usarlo en otro sistema operativo similar a UNIX, como FreeBSD, encontrará que es necesario especificar un directorio, por lo que es una buena práctica usar esta forma del comando.

Especificando dónde buscar

Para listar solo los archivos y subdirectorios que están contenidos en el directorio / home / hope / Documents / images, especifíquelo como el primer argumento del comando:

encontrar / inicio / esperanza / Documentos / imágenes

 / home / hope / Documents / images / home / hope / Documents / images / hp /home/hope/Documents/images/hp/snape.jpg /home/hope/Documents/images/hp/harry.jpg / home / hope / Documents / images / memes /home/hope/Documents/images/memes/winteriscoming.jpg /home/hope/Documents/images/memes/goodguygary.JPG /home/hope/Documents/images/memes/picard.jpg 

Observe que la ruta completa también se muestra en los resultados.

Si nuestro directorio de trabajo es / home / hope / Documents, podemos usar el siguiente comando, que encuentra los mismos archivos:

encontrar ./imágenes

Pero esta vez, la salida refleja la ubicación inicial de la búsqueda y se ve así:

 ./images ./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG. /images/memes/picard.jpg 

De forma predeterminada, la búsqueda buscará en cada subdirectorio de su ubicación inicial. Si quiere restringir cuántos niveles de subdirectorio buscar, puede usar la opción -maxdepth con un número.

Por ejemplo, si especifica -maxdepth 1 buscará solo en el directorio donde comienza la búsqueda. Si se encuentran subdirectorios, se enumerarán, pero no se buscarán.

encontrar . -maxdepth 1

 . ./images ./bigfiles.txt ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./archlinux-2016.02.01-dual.iso 

Especificando -maxdepth 2 buscará el directorio y un subdirectorio profundo:

encontrar . -maxdepth 2

 . ./images ./images/hp ./images/memes ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at- hagreds.doc ./hp-fanfic/dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

Especificando -maxdepth 3 buscará un nivel más profundo que eso:

encontrar . -maxdepth 3

 . ./images ./images/hp ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG. /images/memes/picard.jpg ./gimp-2.8.16.tar.bz2 ./hp-fanfic ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./ hp-fanfic / dumbledores-lament.doc ./archlinux-2016.02.01-dual.iso 

Encontrar por nombre

Para restringir los resultados de búsqueda para que coincidan solo con los archivos y directorios que tienen un nombre determinado, use la opción -name y ponga el nombre entre comillas:

encontrar . -nombre "picard.jpg"

 ./images/memes/picard.jpg 

También puede usar comodines como parte de su nombre de archivo. Por ejemplo, para buscar todos los archivos cuyo nombre termina en .jpg, puede usar un asterisco para representar el resto del nombre del archivo. Cuando ejecute el comando, el shell agrupará el nombre del archivo en cualquier cosa que coincida con el patrón:

encontrar . -nombre "* .jpg"

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/picard.jpg 

Observe que nuestro comando no listó el archivo cuya extensión ( JPG ) está en mayúsculas. Esto se debe a que, a diferencia de otros sistemas operativos, como Microsoft Windows, los nombres de archivos de Linux distinguen entre mayúsculas y minúsculas.

Para realizar una búsqueda que no distinga mayúsculas y minúsculas, use la opción -iname :

encontrar . -iname "* .jpg"

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg 

Encontrar solo archivos, o solo directorios.

Para listar solo archivos y omitir los nombres de directorio de sus resultados, especifique -type f :

encontrar . -tipo f

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg ./gimp-2.8 .16.tar.bz2 ./hp-fanfic/malfoys-revenge.doc ./hp-fanfic/weekend-at-hagreds.doc ./hp-fanfic/dumbledores-lament.doc ./archlinux-2016.02.01-dual .Yo asi 

Para listar solo directorios y omitir nombres de archivos, especifique -type d :

encontrar . -tipo d

 . ./images ./images/hp ./images/memes ./hp-fanfic 

Encontrar archivos basados ​​en tamaño

Para mostrar solo archivos de un tamaño determinado, puede usar la opción de tamaño . Para especificar el tamaño, use un signo más o un signo menos (para "más que" o "menos que"), un número y un sufijo cuantitativo como k, M o G.

Por ejemplo, para encontrar archivos que son "más grandes que 50 kilobytes", use -size + 50k :

encontrar . -tamaño + 50k

 ./images/memes/winteriscoming.jpg ./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso 

Para archivos "mayores a 10 megabytes", use -size + 10M :

encontrar . -size + 10M

 ./gimp-2.8.16.tar.bz2 ./archlinux-2016.02.01-dual.iso 

Para "más grande que 1 gigabyte", use -size + 1G :

encontrar . -size + 1G

 ./archlinux-2016.02.01-dual.iso 

Para archivos en un cierto rango de tamaño, use dos opciones de tamaño . Por ejemplo, para encontrar archivos "más grandes que 10 megabytes, pero más pequeños que 1 gigabyte", especifique -size + 10M -size -1G :

encontrar . -size + 10M -size -1G

 ./gimp-2.8.16.tar.bz2 

Buscar archivos basados ​​en modificaciones, accesos o cambios de estado

La opción -mtime restringe la búsqueda por cuántos días desde que se modificó el contenido del archivo. Para especificar días en el pasado, use un número negativo. Por ejemplo, para buscar solo los archivos que se modificaron en los últimos dos días (hace 48 horas), use -mtime -2 :

encontrar . -mtime -2

La opción -mmin hace lo mismo, pero en términos de minutos, no de días. Por ejemplo, este comando muestra solo los archivos modificados en la última media hora:

encontrar . -mmin -30

Una opción similar es -ctime, que verifica cuándo se modificó por última vez el estado de un archivo, medido en días. Un cambio de estado es un cambio en los metadatos del archivo. Por ejemplo, cambiar los permisos de un archivo es un cambio de estado.

La opción -cmin buscará un cambio de estado, medido en minutos.

También puede buscar cuándo se accedió por última vez a un archivo; en otras palabras, cuándo se vio su contenido más recientemente. La opción -atime se usa para buscar archivos según el tiempo de acceso más reciente, medido en días.

La opción -amin realizará la misma restricción de búsqueda, pero se medirá en minutos.

Redirigiendo la salida a un archivo de texto

Si está realizando una búsqueda muy grande, es posible que desee guardar los resultados de la búsqueda en un archivo, para poder ver los resultados más adelante. Puede hacer esto redirigiendo su salida de búsqueda a un archivo:

encontrar . -iname "* .jpg"> images.txt

Luego puede abrir sus resultados en un editor de texto o imprimirlos con el comando cat .

gato images.txt

 ./images/hp/snape.jpg ./images/hp/harry.jpg ./images/memes/winteriscoming.jpg ./images/memes/goodguygary.JPG ./images/memes/picard.jpg 

Alternativamente, puede canalizar su salida al comando tee, que imprimirá la salida en la pantalla y la escribirá en un archivo:

encontrar . -size + 500M | tee bigfiles.txt

 ./archlinux-2016.02.01-dual.iso 

gato bigfiles.txt

 ./archlinux-2016.02.01-dual.iso 

Suprimiendo mensajes de error.

Puede recibir el mensaje de error "Permiso denegado" al realizar una búsqueda. Por ejemplo, si busca en el directorio raíz como un usuario normal:

encontrar /

 buscar: `/ var / lib / sudo / ts ': permiso denegado encontrar:` / var / lib / sudo / lectured': permiso denegado encontrar: `/ var / lib / polkit-1 ': permiso denegado encontrar:` / var / lib / container ': Permiso denegado encontrar: `/var/lib/gdm3/.dbus': Permiso denegado encontrar:` /var/lib/gdm3/.config/ibus ': Permiso denegado ... 

Recibirá ese mensaje de error si encuentra intenta acceder a un archivo que su cuenta de usuario no tiene permiso para leer. Es posible que pueda realizar la búsqueda como superusuario ( root ), que tiene acceso completo a todos los archivos del sistema. Pero no se recomienda hacer las cosas como root, a menos que no haya otras opciones.

Si todo lo que necesita hacer es ocultar los mensajes de "Permiso denegado", puede agregar 2 &> 1 | grep -v "Permiso denegado" al final de su comando, como este:

encontrar / 2> & 1 | grep -v "Permiso denegado"

El ejemplo anterior filtra los mensajes de "Permiso denegado" de su búsqueda. ¿Cómo?

2> & 1 es una redirección especial que envía mensajes de error a la salida estándar para canalizar las líneas combinadas de salida al comando grep . grep -v luego realiza una coincidencia inversa en "Permiso denegado", mostrando solo las líneas que no contienen esa cadena.

Redirigir y usar grep para filtrar los mensajes de error es una técnica útil cuando "Permiso denegado" es saturar sus resultados de búsqueda y no puede realizar la búsqueda como root.

Ejemplos

encontrar ~ /. -nombre "* .txt" -amin -120

Encuentre todos los archivos en su directorio de inicio y debajo de los cuales termina en la extensión " .txt ". Mostrar solo los archivos accedidos en las últimas dos horas.

encontrar . -name "* .zip" -size + 10M -mtime -3

Encuentre todos los archivos en el directorio de trabajo y debajo de cuyo nombre tiene la extensión " .zip " y cuyo tamaño es superior a 10 megabytes. Mostrar solo archivos cuyo contenido se modificó en las últimas 72 horas.

encontrar . -iname "* report *" -tipo f -maxdepth 2

Realice una búsqueda que no distinga mayúsculas y minúsculas para los archivos que contienen la palabra " informe " en su nombre. Si la búsqueda encuentra un directorio con "informe" en su nombre, no lo muestre. Busque solo en el directorio de trabajo y un nivel de directorio debajo de este.

buscar / -nombre "* init *" 2> & 1 | grep -v "Permiso denegado" | tee ~ / initfiles.txt

Encuentre todos los archivos en el sistema cuyo nombre contiene " init ", suprimiendo los mensajes de error. Muestre los resultados en la pantalla y envíelos a un archivo en su directorio de inicio llamado " initfiles.txt ".