Comodines – Cómo dominar el sistema de archivos de Linux

Introducción

En la sección sobre administración de archivos aprendimos sobre algunos comandos para hacer cosas interesantes. El problema era que todos operaban en un solo archivo a la vez, no muy eficiente. Ahora voy a presentarte un medio para jugar con un conjunto de archivos a la vez.

Entonces, ¿qué son?

Los comodines son un conjunto de bloques de construcción que te permiten crear un patrón, que define un conjunto de archivos o directorios. Como recordarás, cada vez que nos referimos a un archivo o directorio en la línea de comandos, en realidad nos referimos a una ruta.

Siempre que nos referimos a una ruta, también podemos usar comodines en esa ruta para convertirla en un conjunto de archivos o directorios.

Aquí está el conjunto básico de comodines:

  • * – representa cero o más caracteres.
  • – representa un solo caracter.
  • [] – representa un rango de caracteres.

Como primer ejemplo básico presentaremos el  * . En el siguiente ejemplo, enumeraremos cada entrada que comience con una b.

Bajo el capó

El mecanismo aquí es realmente interesante. A primera vista, puedes suponer que el comando anterior (ls) recibe el argumento b* y luego procede a traducirlo a las coincidencias requeridas.

En realidad, es bash (el programa que proporciona la interfaz de línea de comandos) que hace la traducción por nosotros. Cuando le ofrecemos este comando, ve que hemos usado comodines y, por lo tanto, antes de ejecutar el comando (en este caso, ls) reemplaza el patrón con cada archivo o directorio (es decir, ruta) que coincida con ese patrón. Emitimos el comando:

  • ls b *

Entonces el sistema traduce esto a:

  • ls barry.txt blah.txt bob

y luego ejecuta el programa. El programa nunca ve los comodines y no tiene idea de que los usamos. Esto es genial, ya que significa que podemos usarlos en la línea de comandos cuando queramos. No estamos limitados solo a ciertos programas o situaciones.

Algunos ejemplos mas

Algunos ejemplos más para ilustrar su comportamiento. Para todos los ejemplos a continuación, supongamos que estamos en el directorio linuxtutorialwork y que contiene los archivos que se enumeran arriba.

También ten en cuenta que estoy usando ls en estos ejemplos simplemente porque es una forma conveniente de ilustrar su uso. Los comodines se pueden usar con cualquier comando.

Cada archivo con una extensión de txt al final. En este ejemplo, hemos utilizado una ruta absoluta. Los comodines funcionan igual si la ruta es absoluta o relativa.

Ahora vamos a presentar el operador ?. En este ejemplo, estamos buscando cada archivo cuya segunda letra es i. Como puedes ver, el patrón se puede construir usando varios comodines.

O qué tal cada archivo con una extensión de tres letras. Ten en cuenta que video.mpeg no coincide, ya que el nombre de la ruta debe coincidir exactamente con el patrón dado.

Y finalmente el operador de rango ( [] ). A diferencia de los 2 comodines anteriores que especificaban cualquier caracter, el operador de rango te permite limitar a un subconjunto de caracteres. En este ejemplo, estamos buscando todos los archivos cuyo nombre comienza con una s o v.

Con rangos también podemos incluir un conjunto usando un guión. Entonces, por ejemplo, si quisiéramos encontrar cada archivo cuyo nombre incluye un dígito, podríamos hacer lo siguiente:

También podemos revertir un rango usando el cursor (^), lo que significa buscar cualquier caracter que no sea uno de los siguientes.

Algunos ejemplos del mundo real

Los ejemplos anteriores ilustran cómo funcionan los comodines, pero es posible que te preguntes qué uso tienen en realidad. La gente los usa en todas partes y, a medida que avanzas, estoy seguro de que encontrarás muchas formas en que puedes usarlos para facilitarte la vida.

Aquí hay algunos ejemplos para darte una idea de lo que es posible. Recuerda, estos son solo una pequeña muestra de lo que es posible, y se pueden usar siempre que especifiques una ruta en la línea de comandos. Con un poco de pensamiento creativo, encontrarás que se pueden usar en todo tipo de situaciones.

Encontrar el tipo de archivo de cada archivo en un directorio.

Mover todos los archivos de tipo jpg o png (archivos de imagen) a otro directorio.

Descubrir el tamaño y el tiempo de modificación del archivo .bash_history en el directorio de inicio de cada usuario. (.bash_history es un archivo en un directorio de inicio de usuarios típico que mantiene un historial de comandos que el usuario ha ingresado en la línea de comandos.

¿Recuerdas cómo . significa que es un archivo oculto?) Como puedes ver en este ejemplo, podemos usar comodines en cualquier punto de la ruta.

Resumen

Lo que aprendimos

No hay nuevos comandos introducidos en este artículo.

Conceptos importantes

En cualquier lugar en cualquier ruta

Los comodines se pueden usar en cualquier parte de una ruta.

Dondequiera que se use una ruta

Debido a que el sistema realiza la sustitución de comodines, no el comando, se pueden usar donde sea que se use una ruta.

Practicando lo aprendido

Juguemos con algunos patrones.

  • Un buen directorio para practicar es /etc, que es un directorio que contiene archivos de configuración para el sistema. Como usuario normal, puedes ver los archivos, pero no puedes realizar ningún cambio, por lo que no podemos hacer ningún daño. Has una lista de ese directorio para ver qué hay allí. Luego, elige varios subconjuntos de archivos y observa si puedes crear un patrón para seleccionar solo esos archivos.
  • Has una lista de /etc con solo archivos que contengan una extensión.
  • ¿Qué pasa con solo una extensión de 3 letras?
  • ¿Qué hay de los archivos cuyo nombre contiene una letra mayúscula? (sugerencia: [[: upper:]] puede ser útil aquí)
  • ¿Puedes enumerar archivos cuyo nombre tiene 4 caracteres?