¿Cómo encontrar archivos usando Bash?

Los comandos que más se utilizan para encontrar archivos son:

  • locate - encuentra archivos por su nombre. Para ello, lee una o más bases de datos creadas por la utilidad updatedb y muestra los nombres de archivos que coincidan con al menos alguno de los patrones que se le indican. Los resultados pueden no contener los archivos que se hayan creado en las últimas 12-24 horas.

  • find - busca archivos en una jerarquía de directorios en tiempo real.

Comando locate

Por ejemplo, si queremos encontrar el archivo resolv.conf ejecutamos el siguiente comando:

$ locate resolv.conf
/etc/resolv.conf
/etc/resolvconf/resolv.conf.d
/etc/resolvconf/resolv.conf.d/base
/etc/resolvconf/resolv.conf.d/head
/etc/resolvconf/resolv.conf.d/tail
/usr/share/man/man5/resolv.conf.5.gz
/var/tmp/resolv.conf~

Si en vez de listar los nombres de los archivos que coinciden con el patrón provisto a locate queremos saber la cantidad de coincidencias, ejecutamos el siguiente comando:

$ locate -c resolv.conf
7

Algunos trucos con locate

-i option

La búsqueda NO es case sensitive. De esta manera, coincide RESOLV.CONF, resolv.CONF, etc.

$ locate -i Resolv.conf
/etc/resolv.conf
/etc/resolvconf/resolv.conf.d
/etc/resolvconf/resolv.conf.d/base
/etc/resolvconf/resolv.conf.d/head
/etc/resolvconf/resolv.conf.d/tail
/usr/share/man/man5/resolv.conf.5.gz
/var/tmp/resolv.conf~

-n option

Limita la búsqueda a una número de resultados que se muestran en pantalla.

$ locate -n 1 Resolv.conf
/etc/resolv.conf

-b option

Busca un archivo con el nombre exactamente cómo se lo indica.

$ locate -b '\resolv.conf'
/etc/resolv.conf

Muestra información acerca de la base de datos creada por updatedb.

locate -S
Database /var/lib/mlocate/mlocate.db:
39,315 directories
267,602 files
20,804,397 bytes in file names
7,998,427 bytes used to store database

Si creo archivos y quiero buscarlos con el comando locate, ¿puedo encontrarlos?

No, como mencionamos anteriormente es posible que la base de datos no refleje los archivos creados en las últimas horas, pero para que eso suceda hay que actualizar la base de datos. Simplemente con ejecutar el comando updatedb para luego realizar la búsqueda.

Comando find

La sintaxis básica del comando es la siguiente:

$ find /path/del/directorio -name "nombre-del-archivo"

Un ejemplo sencillo del uso de este comando es:

$ find /etc -name "resolv.conf"
find: ‘/etc/puppetlabs/puppet/ssl’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/collectd/conf.d’: Permission denied
/etc/resolv.conf

Si en cambio queremos buscar todos los archivos .conf , podemos ejecutar el comando de la siguiente manera:

$ find /etc -name "*.conf"
/etc/host.conf
/etc/updatedb.conf
/etc/ldap/ldap.conf
(...)
/etc/fuse.conf
/etc/insserv.conf
/etc/udev/udev.conf
/etc/resolv.conf
/etc/ntp.conf

Algunos trucos con find

-type option

Con esta opcion, por ejemplo, se puede buscar distintos tipos de archivos, como directorios (d), sockets (s), archivos comunes (f), entre otros.

$ find /usr/lib/ -type d -name "gcc"
/usr/lib/gcc

-atime option

Con esta opción podemos buscar archivos que no fueron accedidos hace cierta cantidad de días. En el ejemplo sería hace un día.

find /bin/ -type f -atime 1
/bin/setfont
/bin/loadkeys
/bin/chown
/bin/sleep
/bin/gzip
/bin/journalctl
/bin/chmod
/bin/systemd-tmpfiles
/bin/udevadm
/bin/mkdir
/bin/tempfile
/bin/fusermount
/bin/touch
/bin/kill
/bin/mount

-empty option

Buscar archivos vacíos, que pueden ser archivos comunes o directorios.

$ find /etc -type f -empty
/etc/subuid-
/etc/subgid-
/etc/apt/sources.list~
/etc/X11/fonts/Type1/t1-teams.alias
/etc/newt/palette.original
/etc/environment
/etc/.pwd.lock
/etc/security/opasswd
/etc/gconf/gconf.xml.defaults/%gconf-tree.xml
/etc/gconf/gconf.xml.mandatory/%gconf-tree.xml
/etc/sensors.d/.placeholder