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 extglobopció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 nullglobopción de shell, en cuyo caso se elimina el patrón.
Ejemplo:
touch file1
ls file[0-9]
Aquí, solo file1se mostrará la lista de archivos para .
Con ls file{0..9}, lsse quejaría de no encontrar file0, file2etc.
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á afile1yfile2.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 (
9veces26) 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
bashshell. 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
catelimínelos. Redirigir el error estándar a/dev/nullsuprimirí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!