Iterar sobre arquivos em uma pasta

Iterar sobre arquivos em uma pasta

Eu tenho uma pasta contendo arquivos e preciso iterá-los usando o comando unix "tr" tendo como saída o mesmo nome de antes (se 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

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

Responder1

Isso caté um desperdício inútil de CPU, elimine-o. Envie a saída para um arquivo temporário e renomeie esse arquivo posteriormente:

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

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

tr x y < input | sponge input

inputObserve que tais renomeações podem destruir contextos sofisticados de ACL ou de segurança definidos no arquivo original, agora desvinculado .

informação relacionada