
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 cat
un 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 moreutils
la 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
.