Ejecute el comando en archivos con el mismo nombre desde varios directorios

Ejecute el comando en archivos con el mismo nombre desde varios directorios

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>/myfilepara 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 $nse expande a algún número entero.

Respuesta2

find . -type f -name myfile | xargs command

información relacionada