Execute o comando em arquivos de mesmo nome de vários diretórios

Execute o comando em arquivos de mesmo nome de vários diretórios

Quero executar um comando que receba vários argumentos que residem em diretórios diferentes com o mesmo nome de arquivo, por exemplo

mycommand dir-001/myfile dir-002/myfile dir-003/myfile … dir-048/myfile

Estou procurando algum comando shell que possa colocar todos os arquivos em subdiretórios numerados de 1 a 48 ou qualquer número como argumentos de comando.

Responder1

Você pode usar globbing de nome de arquivo padrão, por exemplo, para todos os números de 3 dígitos (em ordem):

$ mycommand dir-[0-9][0-9][0-9]/myfile

Com o globbing básico, você precisa de um padrão para números de um dígito, um para números de dois dígitos, etc.

$ mycommand dir-[0-9]/myfile dir-[0-9][0-9]/myfile

Zsh (mas não outros shells) também suporta mycommand dir-<->/myfile, ou por exemplo, mycommand dir-<3-42>/myfilepara os diretórios numerados de 3 a 42.

Ou se você preferir a expansão de chaves (e seu shell suportar):

$ mycommand dir-{1..3}/myfile

Se os nomes dos seus diretórios contiverem zeros à esquerda, coloque-os entre colchetes, por exemplo dir-{001..048}/myfile, .

Com a expansão de chaves, você também pode fazer (em ksh93 e zsh, mas não em bash)

$ mycommand dir-{1..$n}/myfile

onde $nse expande para algum número inteiro.

Responder2

find . -type f -name myfile | xargs command

informação relacionada