Se você escreve um script para ser executado em vários sistemas e a portabilidade é uma preocupação, então nada supera for
loops e ${var%sfx}
da resposta de user1404316 .
No entanto, se você está procurando uma maneira conveniente de fazer coisas semelhantes em seu próprio sistema, então eu recomendo vivamente Paralelo GNU , que é basicamente xargs
em esteróides. Aqui está uma solução para sua tarefa específica:
parallel mycommand {} -o {.}-processed.txt ::: *.txt
Será necessária uma lista de strings após :::
(o shell expandirá *.txt
para uma lista de nomes de arquivos correspondentes) e executará mycommand {} -o {.}-processed.txt
para cada string, substituindo {}
por string de entrada (como xargs
) e {.}
com nome de arquivo sem extensão.
Você pode alimentar listas de strings de entrada via stdin
( xargs -way), para parear com find
ou locate
, mas eu raramente preciso de algo mais que zsh
' globs estendidos.
Dê uma olhada no tutorial paralelo GNU para ter uma ideia do que ele pode fazer. Eu uso isso o tempo todo para converter lotes, extraindo arquivos para outros diretórios, etc.