glob(7)

NOMBRE
glob - Generación de nombres de rutas de archivos

DESCRIPCIÓN
Tiempo atrás, en UNIX V6 existía una aplicación /etc/glob que expandía patrones con comodines. Actualmente es una orden integrada en la shell.

Actualmentes, está disponible una rutina de biblioteca glob(3) que efectúa esta función en las aplicaciones de usuario.

Las reglas son como sigue (POSIX.2, 3.13).

  Concordancia de comodines
Se considera que una cadena de caracteres es un patrón con comodines si contiene al menos uno de los siguientes caracteres '?', '*' o '['. La generación de nombres de ruta ('globbing') es la operación que expande un patrón con comodines formando una lista de nombres de ruta de archivos que concuerdan con el patrón. La concordancia se define así:

Un signo de cierre de interrogación '?' (no entre corchetes) concuerda con cualquier carácter simple.

Un asterisco '*' (no entre corchetes) concuerda con cualquier cadena de caracteres, incluyendo la cadena vacía.

Clases de caracteres

Una expresión "[...]" donde el primer carácter después del '[' inicial no es un '!' coincide con un solo carácter, es decir, cualquiera de los caracteres entre corchetes. La cadena entre corchetes no puede estar vacía; por lo tanto, se permite ']' entre corchetes, siempre que sea el primer carácter. (Por lo tanto, "[][!]" coincide con los tres caracteres '[', ']' y '!'.)

Intervalos

Existe una convención especial: dos caracteres separados por '-' denotan un rango. (Por lo tanto, "[A-Fa-f0-9]" es equivalente a "[ABCDEFabcdef0123456789]".) Se puede incluir '-' en su significado literal convirtiéndolo en el primer o último carácter entre corchetes. (Por lo tanto, "[]-]" coincide solo con los dos caracteres ']' y '-', y "[--0]" coincide con los tres caracteres '-', '.' y '0', ya que '/' no puede coincidir).

Complementación

Una expresión "[!...]" coincide con un solo carácter, es decir, cualquier carácter que no coincida con la expresión obtenida al eliminar el primer '!'. (Por lo tanto, "[!]a-]" coincide con cualquier carácter excepto ']', 'a' y '-'.)

Se puede eliminar el significado especial de '?', '*' y '[' precediéndolos de una barra invertida o, si esto forma parte de una línea de órdenes de la shell: entrecomillándolos. Entre corchetes, estos caracteres se representan a sí mismos. Por lo tanto, "[[?*\]" coincide con los cuatro caracteres '[', '?', '*' y '\'.

  Nombres de Ruta
La función de globbing se aplica a cada componente de una ruta de acceso por separado. Un carácter '/' en una ruta de acceso no puede coincidir con un comodín '?' o '*', ni con un rango como "[.-0]". Un rango que contenga un carácter '/' explícito es sintácticamente incorrecto. (POSIX requiere que los patrones sintácticamente incorrectos no se modifiquen).

Si un nombre de archivo comienza con '.', este carácter debe coincidir explícitamente. (Por lo tanto, rm * no eliminará .profile, e tar c * no archivará todos los archivos; tar c . es mejor).

  Listas vacías
La bonita y simple regla dada arriba: "expandir un patrón de comodines a una lista de nombres de caminos que concuerdan" fue la definición original de UNIX. Le permitía a uno tener patrones que se `expandían' a una lista vacía, como en

    xv -wait 0 *.gif *.jpg

donde quizás no había ningún archivo gif presente (y esto no es un error). Sin embargo, POSIX requiere que un patrón de comodines se deje sin cambios cuando sea sintácticamente incorrecto o cuando la lista de nombres de ruta concordantes esté vacía. Con bash uno puede forzar el comportamiento clásico mediante esta orden:

    shopt -s nullglob

(Problemas similares ocurren por todas partes. Por ejemplo, si un antiguo script contiene

    rm `find . -name "*~"`

una adapatación moderna requerirá

    rm -f no-tal-archivo `find . -name "*~"`

para evitar mensajes de error de rm llamado con una lista de argumentos vacía.)

NOTAS

  Expresiones regulares
Observe que los patrones de comodines no son expresiones regulares, aunque son algo similares. Lo primero, concuerdan con nombres de ficheros en vez de con texto, y lo segundo, los convenios no son los mismos: p.ej., en una expresión regular '*' significa cero o más copias de lo precedente.

Ahora que las expresiones regulares tienen expresiones entre corchetes donde la negación se indica con '^', POSIX ha declarado que el efecto de un patrón comodín "[^...]" no está definido.

  Clases de caracteres e internacionalización
Naturalmente, los rangos se concibieron originalmente como rangos ASCII, de modo que "[ -%]" representa "[ !"#$%]" y "[a-z]" representa 'cualquier letra minúscula'. Algunas implementaciones de UNIX generalizaron esto, de modo que un rango X-Y representa el conjunto de caracteres con código entre los códigos de X e Y. Sin embargo, esto requiere que el usuario conozca la codificación de caracteres utilizada en el sistema local y, además, no resulta conveniente si la secuencia de intercalación del alfabeto local difiere del orden de los códigos de caracteres. Por lo tanto, POSIX extendió considerablemente la notación de corchetes, tanto para patrones comodín como para expresiones regulares. Anteriormente, vimos tres tipos de elementos que pueden aparecer en una expresión de corchetes: (i) la negación, (ii) caracteres individuales explícitos y (iii) rangos. POSIX especifica rangos de una manera internacionalmente más útil y añade tres tipos más:

(III) Los rangos X-Y comprenden todos los caracteres que caigan entre X e Y (incluidos) en la secuencia de clasificación en curso según se defina en la categoría LC_COLLATE para la localización o escenario actual.

(IV) Clases de caracteres nombradas, como

[:alnum:]  [:alpha:]  [:blank:]  [:cntrl:]
[:digit:]  [:graph:]  [:lower:]  [:print:]
[:punct:]  [:space:]  [:upper:]  [:xdigit:]

de esta manera, se puede decir "[[:lower:]]" en lugar de "[a-z]", y que funcione también en Dinamarca, donde hay tres letras después de 'z' en el alfabeto. Estas clases de caracteres se definen mediante la categoría LC_CTYPE en la configuración regional actual.

(v) Símbolos de intercalación, como "[.ch.]" o "[.a-acute.]", donde la cadena entre "[." y ".]" es un elemento de intercalación definido para la configuración regional actual. Tenga en cuenta que puede ser un elemento multicarácter.

(vi) Expresiones de clase de equivalencia, como "[=a=]", donde la cadena entre "[=" y "=]" es cualquier elemento de cotejo de su clase de equivalencia, según lo definido para la configuración regional actual. Por ejemplo, "[[=a=]]" podría ser equivalente a "[aáàäâ]", es decir, a "[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]".

VÉASE TAMBIÉN
sh(1), fnmatch(3), glob(3), locale(7), regex(7)

TRADUCCIÓN
La traducción al español de esta página del manual fue creada por Gerardo Aburruzaga García <gerardo.aburruzaga@uca.es>, Miguel Pérez Ibars <mpi79470@alu.um.es> y Marcos Fouces <marcos@debian.org>

Esta traducción es documentación libre; lea la GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.

Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org.