locate filename
find -name '*filename*'
echo **/*filename*
ls -ld **/*filename*
(Siga leyendo para conocer los términos y condiciones principales. Lea el manual para la letra pequeña).
Listar el contenido de un directorio es una especie de característica secundaria de ls
. El trabajo principal de ls
, el que ocupa la mayor parte de su complejidad, es ajustar su pantalla. (Consulte el manual y compare la cantidad de opciones relacionadas con la elección de los archivos que se mostrarán frente a la cantidad de opciones que controlan qué información mostrar acerca de cada archivo y cómo se formatea la pantalla. Esto es cierto tanto para GNU como para usted). lo encontraré en Linux y en otros sistemas con menos opciones, desde los primeros días).
El modo predeterminado de ls
es que cuando le pasa un directorio, enumera los archivos en ese directorio. Si le pasa cualquier otro tipo de archivo (archivo normal, enlace simbólico, etc.), solo se muestra ese archivo. (Esto se aplica a cada argumento por separado). La opción -d
le dice que ls
nunca descienda a un directorio.
ls
tiene una opción -R
que le dice que enumere directorios de forma recursiva. Pero tiene una aplicabilidad limitada y no permite mucho filtrado en la salida.
La primera herramienta para realizar la coincidencia de patrones es el propio shell. No necesita ningún otro comando: simplemente escriba sus comodines y estará listo. Esto se conoce como globbing .
echo *filename*
Tradicionalmente, los comodines se limitaban al directorio actual (o al directorio indicado:) echo /some/where/*filename*
. A *
coincide con cualquier nombre de archivo, o cualquier parte del nombre de archivo, pero *.txt
no coincide foo/bar.txt
. Los shells modernos han agregado el patrón **/
que significa "en este directorio, o en cualquier directorio debajo de él (recursivamente)". Con bash, por razones de compatibilidad histórica, esta característica debe habilitarse explícitamente con shopt -s globstar
(puede poner esta línea en su ~/.bashrc
).
echo **/*filename*
El echo
comando solo repite la lista de nombres de archivo generados por el shell. Como excepción, si no hay ningún nombre de archivo coincidente, el patrón comodín no se modifica en bash (a menos que establezca shopt -s nullglob
, en cuyo caso el patrón se expande a una lista vacía), y zsh señala un error (a menos que establezca setopt nullglob
, o setopt no_no_match
lo que hace que el patrón se deje sin cambios).
Es posible que aún desee utilizar ls
sus opciones. Por ejemplo, ls
puede dar indicaciones sobre la naturaleza o los permisos del archivo (directorio, ejecutable, etc.) a través de colores. Es posible que desee mostrar la fecha, el tamaño y la propiedad del archivo ls -l
. Vea el manual para muchas más opciones.
El comando tradicional para buscar un archivo en un árbol de directorios es find
. Viene con muchas opciones para controlar qué archivos mostrar y qué hacer con ellos. Por ejemplo, para buscar archivos cuyo nombre coincida con el patrón *filename*
en el directorio actual y sus subdirectorios e imprimir sus nombres:
find /some/dir -name '*filename*' -print
-print
es una acción (la mayoría de las otras acciones consisten en ejecutar un comando en el archivo); si no pones una acción, -print
está implícito. Además, si no especifica ningún directorio para recorrer ( /some/dir
arriba), el directorio actual está implícito. La condición -name '*filename'
dice enumerar (o actuar) solo los archivos cuyo nombre coincide con ese patrón; Hay muchos otros filtros, como -mtime -1
los archivos modificados en las últimas 24 horas. A veces puede omitir las comillas -name '*filename*'
, pero solo si el comodín no coincide con ningún archivo en el directorio actual (ver arriba). Con todo, la forma corta es
find -name '*filename*'
Otra herramienta útil cuando sabes (parte de) el nombre de un archivo es locate
. Esta herramienta consulta una base de datos de nombres de archivos. En los sistemas típicos, se actualiza todas las noches. La ventaja de locate
Over find /
es que es mucho más rápido. Un inconveniente es que su información puede ser obsoleta. Hay varias implementaciones locate
que difieren en su comportamiento en sistemas multiusuario: el locate
programa básico indexa solo archivos de lectura pública (es posible que desee ejecutar el complemento updatedb
para crear una segunda base de datos que indexe todos los archivos de su cuenta); hay otras versiones (mlocate, slocate) que indexan todos los archivos y hacen que el locate
programa filtre la base de datos para devolver solo los archivos que puede ver.
locate filename
A veces cree que un paquete proporciona un archivo en su distribución, conoce (parte de) el nombre del archivo pero no el nombre de su paquete, y desea instalar el paquete. Muchas distribuciones proporcionan una herramienta para eso. En Ubuntu, es apt-file search filename
. Para comandos equivalentes en otros sistemas, verifique el Pacman Rosetta .
ls
?