
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>/myfile
para 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 $n
se expande para algum número inteiro.
Responder2
find . -type f -name myfile | xargs command