En utilisant les systèmes de contrôle de version, je suis ennuyé par le bruit lorsque le diff indique No newline at end of file
.
Alors je me demandais :comment ajouter une nouvelle ligne à la fin d'un fichier pour se débarrasser de ces messages ?
Réponse acceptée :
Pour nettoyer récursivement un projet, j'utilise ce oneliner :
git ls-files -z | while IFS= read -rd '' f; do tail -c1 < "$f" | read -r _ || echo >> "$f"; done
Explication :
-
git ls-files -z
répertorie les fichiers dans le référentiel. Il prend un modèle facultatif comme paramètre supplémentaire qui peut être utile dans certains cas si vous souhaitez limiter l'opération à certains fichiers/répertoires. Comme alternative, vous pouvez utiliserfind -print0 ...
ou des programmes similaires pour répertorier les fichiers concernés - assurez-vous simplement qu'il émetNUL
-entrées délimitées. -
while IFS= read -rd '' f; do ... done
parcourt les entrées, en gérant en toute sécurité les noms de fichiers qui incluent des espaces et/ou des retours à la ligne. -
tail -c1 < "$f"
lit le dernier caractère d'un fichier. -
read -r _
se termine avec un statut de sortie différent de zéro s'il manque une nouvelle ligne à la fin. -
|| echo >> "$f"
ajoute une nouvelle ligne au fichier si l'état de sortie de la commande précédente était différent de zéro.