El patrón estándar de nombre de archivo para igualar un dígito es [0-9]
. Esto coincide con un solo dígito:
cat file[0-9].txt
Para seleccionar solo dos de estos:
cat file[25].txt
Para números mayores que 9, la expansión de llaves será útil (pero vea la nota a continuación para ver la diferencia entre los patrones globales y las expansiones de llaves):
cat file{25..60}.txt
Nuevamente, la expansión de llaves también permite números individuales:
cat file{12,45,900,xyz}.txt
(tenga en cuenta que en el ejemplo anterior, la expansión de llaves no implica un ciclo aritmético, sino que solo genera nombres basados en las cadenas proporcionadas).
En bash
, con la extglob
opción de shell habilitada ( shopt -s extglob
), lo siguiente también funcionará:
cat file@(12|45|490|foo).txt
El @(...)
patrón coincidirá con cualquiera de los |
patrones delimitados incluidos .
La diferencia entre los patrones de englobamiento como [...]
y @(...)
y expansiones Brace, es que una expansión de llaves se genera en la línea de comandos y en realidad no puede coincidir con los nombres existentes en el directorio actual. Un patrón global de nombre de archivo coincidirá con los nombres, pero el shell no se quejará si no existen todos los nombres posibles. Si no existe un nombre coincidente, el patrón permanecerá sin expandir, a menos que también se establezca la nullglob
opción de shell, en cuyo caso se elimina el patrón.
Ejemplo:
touch file1
ls file[0-9]
Aquí, solo file1
se mostrará la lista de archivos para .
Con ls file{0..9}
, ls
se quejaría de no encontrar file0
, file2
etc.
En el siguiente ejemplo, el primer comando solo tocará los nombres existentes que coincidan con el patrón dado, mientras que la segunda línea creará archivos que aún no existen:
touch file[0-9]
touch file{0..9}
file45.txt
. La expresión de corchete[...]
funciona igual que en la expresión regular, pero se usa!
en lugar de^
decir "no en". Un[...]
patrón siempre coincidirá con un solo carácter.{1,2}
tampoco es compatible con POSIX ... ¡aprendí algunas cosas nuevas hoy!grep
, generar URL para pasarcurl
, etc., pero también puede ser confuso a personas acostumbradas a trabajar con globos.La sintaxis a usar es la
file{1,2}
que evaluará afile1
yfile2
.Como también señaló Inian a continuación ... sería más fácil hacerlo
touch file{1..9}
en este caso de ejemplo ...También puede usar múltiples expresiones, como:
Sí, lo anterior creará 234 (
9
veces26
) archivos.fuente
file{1,2}
sintaxis también es conveniente para cambiar el nombre de los archivos:mv some_very_long_filename.txt{,.bak}
Sí, puede usar la expansión de llaves en el
bash
shell. Por solo un par de archivos, simplemente hazlofile{1..2}
o simplementefile{1,2}
O si le preocupa que los archivos no estén allí en algunos casos, simplemente haga un bucle simple,
O bien, si su única operación en los archivos es concatenar y no está seguro de qué archivos no podrían estar presentes en ningún momento, solo
cat
elimínelos. Redirigir el error estándar a/dev/null
suprimiría los errores si el archivo no está disponible.o use la expresión global
file[15]
que no se queja de los errores si no se encuentra el archivo.fuente
file{1,5}
sintaxis de coma era todo lo que me faltaba!