Al usar sistemas de control de versiones, me molesta el ruido cuando la diferencia dice No newline at end of file
.
Así que me preguntaba:¿Cómo agregar una nueva línea al final de un archivo para deshacerme de esos mensajes?
Respuesta aceptada:
Para desinfectar recursivamente un proyecto, uso este oneliner:
git ls-files -z | while IFS= read -rd '' f; do tail -c1 < "$f" | read -r _ || echo >> "$f"; done
Explicación:
-
git ls-files -z
enumera los archivos en el repositorio. Toma un patrón opcional como parámetro adicional que puede ser útil en algunos casos si desea restringir la operación a ciertos archivos/directorios. Como alternativa, podría usarfind -print0 ...
o programas similares para enumerar los archivos afectados; solo asegúrese de que emitaNUL
-entradas delimitadas. -
while IFS= read -rd '' f; do ... done
itera a través de las entradas, manejando de forma segura los nombres de archivo que incluyen espacios en blanco y/o líneas nuevas. -
tail -c1 < "$f"
lee el último carácter de un archivo. -
read -r _
sale con un estado de salida distinto de cero si falta una nueva línea final. -
|| echo >> "$f"
agrega una nueva línea al archivo si el estado de salida del comando anterior era distinto de cero.