Iterar sobre archivos en una carpeta

Iterar sobre archivos en una carpeta

Tengo una carpeta que contiene archivos y necesito iterar sobre ellos usando el comando Unix "tr" que tiene como salida el mismo nombre que antes (si es posible) (el siguiente código no 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

No entiendo cómo puedo usar este comando cat "$f" | tr "\n" "," > "$f"y redirigir la salida de cada archivo. Luego debería usar otro bucle for para crear N comandos de herramientas y ejecutarlos juntos. ¿Tiene algún consejo para los estudios de bucles?

Respuesta1

Es catun desperdicio inútil de CPU, elimínelo. En su lugar, envíe el resultado a un archivo temporal y luego cambie el nombre de ese archivo:

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

Con moreutilsla instalación instalada, esto se puede hacer con sponge(que se ocupa del archivo temporal detrás de escena):

tr x y < input | sponge input

Tenga en cuenta que dichos cambios de nombre pueden destruir ACL sofisticados o contextos de seguridad establecidos en el archivo original ahora desvinculado input.

información relacionada