Muchos de ustedes, compañeros usuarios de Ubuntu, estarán familiarizados con la herramienta «Buscar archivos» que le permite buscar archivos. Como es cierto con la mayoría de las cosas en Linux, hay grandes herramientas de escritorio, pero más poder se puede encontrar en la Terminal que cualquier herramienta de escritorio racionalizado puede igualar.
Hoy, me gustaría presentarles a algunas herramientas que pueden convertir una tarea de búsqueda de archivos en un proceso fácil.
locate
La primera herramienta con la que usted debe sentirse cómodo es también uno de los más simples. El programa locate
funciona de manera similar a la mayoría de las herramientas de búsqueda gráfica.
Usar
Digamos que ha leído sobre cómo modificar X para proporcionar un rendimiento de vídeo mejorado. El documento que está leyendo dice que debe modificar el archivo xorg.conf
, pero el documento no dice dónde está y usted no sabe cómo encontrarlo. Puedes usar locate
para encontrarlo rápidamente:
$ locate xorg.conf/etc/X11/xorg.conf/usr/share/man/man5/xorg.conf.5.gz/var/lib/x11/xorg.conf.md5sum/var/lib/x11/xorg.conf.roster
Está claro que /etc/X11/xorg.conf
es el archivo que buscamos, pero ¿qué pasa si se devuelven docenas o incluso cientos de resultados? ¿Cómo se podría gestionar todo eso? Si sabes un poco sobre expresiones regulares (todo usuario de Linux debería aprender lo básico), puedes usar fácilmente expresiones regulares para buscar directorios o archivos. Por ejemplo, podemos buscar una coincidencia exacta para xorg.conf
con el siguiente comando:
$ locate -r '/xorg.conf$'/etc/X11/xorg.conf
Si quieres buscar archivos sin distinguir entre mayúsculas y minúsculas, puedes usar la opción -i
. Por ejemplo:
$ locate -i 'monthly report'/home/chris/Documents/August Monthly Report.doc/home/chris/Documents/July Monthly Report.doc/home/chris/Downloads/latest monthly report.doc
Algo que puede confundirte cuando empiezas a usar locate
es que no sólo devuelve coincidencias, sino que si la coincidencia es un directorio, también lista todos los directorios y archivos bajo ese directorio. Por ejemplo:
$ locate Desktop/home/chris/Desktop/home/chris/Desktop/Head Shot.jpg/home/chris/Desktop/Skype.lnk/home/chris/Desktop/Steam.lnk...
Este comando devuelve más de mil entradas en mi sistema. Para reducir los resultados a una lista de entradas que coinciden con el término de búsqueda sin todos los archivos y directorios contenidos, utilice la opción -b
:
$ locate -b Desktop/home/chris/Desktop/home/chris/bin/recordSoundAndDesktop.sh/opt/HipChat4/lib/QtQuick/Controls/Styles/Desktop/usr/include/qt4/QtGui/QDesktopServices/usr/include/qt4/QtGui/QDesktopWidget/usr/lib/libreoffice/program/wizards/common/Desktop.py/usr/lib/libreoffice/share/gallery/computers/Computer-Desktop.png/usr/lib/python2.7/dist-packages/xdg/DesktopEntry.py/usr/lib/python2.7/dist-packages/xdg/DesktopEntry.pyc/usr/lib/python3/dist-packages/xdg/DesktopEntry.py/usr/lib/python3/dist-packages/xdg/__pycache__/DesktopEntry.cpython-35.pyc/usr/lib/x86_64-linux-gnu/qt5/qml/QtQuick/Controls/Styles/Desktop/usr/share/kde4/apps/kio_desktop/DesktopLinks/usr/share/man/man3/File::DesktopEntry.3pm.gz/usr/share/perl5/File/DesktopEntry.pm/usr/share/sounds/KDE-Window-All-Desktops-Not.ogg/usr/share/sounds/KDE-Window-All-Desktops.ogg
Todavía hay bastantes coincidencias, pero ya no tenemos que ordenar todos los resultados adicionales para encontrar lo que estamos buscando.
Nota importante
El comando locate
se basa en una base de datos slocate para funcionar. Esta base de datos almacena en caché los nombres de los directorios y archivos del sistema de archivos y permite que el comando locate
funcione en momentos en lugar de tomar largos períodos de tiempo para buscar en todo el sistema de archivos.
Sin embargo, esta capacidad no viene sin costo. Por defecto, su sistema ejecutará un comando para actualizar esta base de datos una vez al día a las 6:25am. Este comando actualizará la base de datos con cualquier cambio realizado en el sistema de archivos desde la última actualización.
Si ha realizado cambios recientemente, como añadir o eliminar grandes cantidades de archivos y directorios, y desea utilizar el comando locate
para buscar en estos nuevos directorios y archivos, puede actualizar manualmente la base de datos slocate en cualquier momento con el siguiente comando:
$ sudo updatedb
Dependiendo del volumen de cambios realizados desde que la base de datos slocate se actualizó por última vez, esto podría tardar entre unos segundos y unos minutos en actualizarse. Una vez hecho esto, está listo para buscar de nuevo con locate
.
que
locate
es ideal para buscar en todo el sistema de archivos. Sin embargo, a veces sólo quieres encontrar dónde vive un comando. Ahí es donde which
entra en juego.
which
sólo hace una cosa, pero lo hace bien. Dado el nombre de un comando, que le dirá donde el archivo para ese comando reside en el sistema de archivos.
Imaginemos que queremos averiguar donde reside el comando firefox
. Podemos simplemente ejecutar lo siguiente para averiguarlo:
$ which firefox/usr/bin/firefox
¿Por qué querrías buscar específicamente un comando? Imagina que tienes un código que necesita reemplazar un comando antiguo. Realmente necesitas eliminar el antiguo (yo suelo renombrarlo con el mismo nombre seguido de «.bak» para tenerlo cerca en caso de necesitarlo) primero antes de poner el nuevo en su lugar. which
te ayudará a encontrar el archivo rápida y fácilmente para que no tengas que buscar por todas partes para encontrarlo.
whereis
El comando whereis
es similar a which pero va un paso más allá. No sólo le dice dónde se encuentra el archivo ejecutable, sino que también localizará el código fuente, la página man y otros directorios asociados.
Siguiendo con el ejemplo de which
, preguntemos a whereis
sobre el comando firefox
:
$ whereis firefoxfirefox: /usr/bin/firefox /usr/lib/firefox /etc/firefox /usr/share/man/man1/firefox.1.gz
Esto me ayudó a encontrar /usr/lib/firefox/plugins
antes cuando trabajaba en la solución para Flash, ya que esa ubicación es donde se almacenan los complementos globales para Firefox.
find
find
es la herramienta de búsqueda definitiva, la navaja suiza de la búsqueda en Linux si se quiere. find
puede hacer de todo, desde buscar archivos basándose en la última vez que fueron modificados, propietarios y grupos, permisos, tipo (archivo, directorio, enlace simbólico, etc), si el archivo es legible/escribible/ejecutable por el usuario actual, tamaño del archivo, si el archivo o directorio está vacío, y mucho más. También puedes buscar coincidencias por expresión regular.
Cuando utilizas esta herramienta en combinación con el comando xargs
(del que tendré que hablar en otro momento), puedes hacer cosas realmente sorprendentes en la línea de comandos. Imagina poder buscar recursivamente en el directorio actual los archivos que terminan en «.bak» que fueron modificados por última vez hace más de 100 días y luego borrarlos con un solo comando:
$ find . -name '*.bak' -type f -mtime +100 -print0 | xargs -0 /bin/rm -f
Al principio parecerá muy complejo, pero cuando domines el arte de usar find
, se convertirá en algo natural. Pronto, te preguntarás cómo has podido buscar cosas sin él.
Para ser franco, hay mucho más que encontrar de lo que estoy dispuesto a cubrir y hay muchas, muchas grandes introducciones a la herramienta que hacen un mejor trabajo de lo que yo haría. Por lo tanto, simplemente voy a señalar a tres grandes referencias que se pueden utilizar para ponerse en marcha con find.
- Ejemplos de uso del comando Linux find
- (Me disculpo por los colores horribles de antemano) Tutorial del comando Unix/Linux «find»
- Usando el comando find
Feliz búsqueda.
¿Te he ayudado?
- Envíame un consejo a través de Paypal.
- Ayuda con el alojamiento de este sitio con mi código de referencia Linode.