Iterar os arquivos em uma pasta

1

Eu tenho uma pasta contendo arquivos, e eu preciso iterar sobre eles usando o comando unix "tr" tendo como saída o mesmo nome de antes (se for possível) (o código abaixo não funciona):

FILES=/root/Desktop/prova/*
for f in $FILES ; do
    echo "Processing $f file..."
    cat $f | tr "\n" "," > $f.tmp & mv $f.tmp $f 
done

Eu não entendo como posso usar este comando cat "$f" | tr "\n" "," > "$f" e redirecionar a saída de cada arquivo. Então eu deveria usar outro loop para criar N comandos de ferramentas e rodar juntos. Você tem algum conselho para estudos de loops?

    
por heisen 24.10.2016 / 17:14

1 resposta

2

O cat é um desperdício inútil de CPU, elimine-o. Envie a saída em vez de um arquivo temporário e renomeie o arquivo depois:

tr x y < input > input.tmp && mv input.tmp input

Com moreutils instalado, isso pode ser feito com sponge (que faz o arquivo temporário nos bastidores):

tr x y < input | sponge input

Observe que tais renomeações podem destruir os contextos de ACL ou de segurança sofisticados definidos no arquivo input do original agora desvinculado.

    
por 24.10.2016 / 17:33