What am I doing wrong?
Você está usando o redirecionamento > ../pos/'{}'
como se fosse manipulado por find
ou awk
, mas os redirecionamentos são manipulados pelo shell. No seu caso, significa que você pode redirecionar apenas a saída de todo o find
(não a saída de awk
).
Observe que você geralmente não precisa usar curinga como *
para o caminho inicial de find
. É o caminho comum find .
o que você queria fazer ou há algum motivo para find *
?
Soluções
Aqui vamos manter a flexibilidade de find
em contraste com a solução de Jacobo de Vera.
Execute awk
em um loop de shell:
find . -type f -print0 |
while read -r -d $'find . -type f -exec sh -c 'awk "{print \}" "{}" > "../pos/{}"' \;
' x; do
awk '{print $2}' "$x" > "../pos/$(basename "$x")"
done
A forma original com -exec
será menos eficiente porque, para cada arquivo, será lançado um shell, além de awk
, e o escape em vários níveis será bastante complicado aqui:
find . -type f -print0 |
while read -r -d $'find . -type f -exec sh -c 'awk "{print \}" "{}" > "../pos/{}"' \;
' x; do
awk '{print $2}' "$x" > "../pos/$(basename "$x")"
done
Também pode haver uma solução alternativa para fazer o redirecionamento em awk
.