Se você está tentando canalizar para um arquivo de saída, iterando sobre caminhos de arquivos ...
Use os recursos exec do find
... para processar suas iterações.
Eu queria fazer uma iteração por meio de uma lista de arquivos explícitos via subshell, e chamar expand
, que gera stdout, e sobrescrever cada arquivo individual. Um problema abordado por esta resposta .
find $(git ls-files | grep '.py$') \
-exec bash -c 'expand -t 4 "$0" > /tmp/e && mv /tmp/e "$0"' {} \;
Eu estou repondo uma versão ligeiramente modificada dessa resposta, já que as outras respostas neste tópico não fornecem uma solução de propósito geral. Esta é a única coisa que vi que funciona, que só se aplica ao iterar sobre caminhos de arquivos.
Posso imaginar uma solução que cria arquivos com o nome de seus itens de iteração de modo abusivo, para que você possa iterar esse nome usando a localização.
Falha na tentativa:
Assim como a chamada find exec, tentei usar bash -c ...
dentro do loop for. Mas eu corri para o mesmo problema de arquivos de saída vazios.
Disclaimer: Eu não tenho certeza qual foi exatamente o meu problema, em todas as tentativas antes de usar o find exec, todos os arquivos de saída que eu esperava serem gravados, foram sobrescritos, meu problema era que eles eram arquivos vazios depois.