
Quiero ejecutar un comando que toma múltiples argumentos que residen en diferentes directorios bajo el mismo nombre de archivo, por ejemplo
mycommand dir-001/myfile dir-002/myfile dir-003/myfile … dir-048/myfile
Estoy buscando algún comando de shell que pueda colocar todos los archivos en subdirectorios numerados desde 1 hasta 48 o cualquier número como argumentos de comando.
Respuesta1
Puede utilizar la agrupación estándar de nombres de archivos, por ejemplo, para todos los números de 3 dígitos (en orden):
$ mycommand dir-[0-9][0-9][0-9]/myfile
Con el globbing básico, necesitas un patrón para números de un dígito, otro para números de dos dígitos, etc.
$ mycommand dir-[0-9]/myfile dir-[0-9][0-9]/myfile
Zsh (pero no otros shells) también admite mycommand dir-<->/myfile
, o por ejemplo, mycommand dir-<3-42>/myfile
para los directorios numerados del 3 al 42.
O si prefiere la expansión de llaves (y su shell la admite):
$ mycommand dir-{1..3}/myfile
Si los nombres de sus directorios contienen ceros a la izquierda, colóquelos entre llaves, por ejemplo dir-{001..048}/myfile
.
Con la expansión de llaves, también puedes hacerlo (en ksh93 y zsh, pero no en bash)
$ mycommand dir-{1..$n}/myfile
donde $n
se expande a algún número entero.
Respuesta2
find . -type f -name myfile | xargs command