Při používání systémů pro správu verzí mě rozčiluje hluk, když rozdíl říká No newline at end of file
.
Tak mě napadlo:Jak přidat nový řádek na konec souboru, abyste se zbavili těchto zpráv?
Přijatá odpověď:
K rekurzivní dezinfekci projektu používám tento oneliner:
git ls-files -z | while IFS= read -rd '' f; do tail -c1 < "$f" | read -r _ || echo >> "$f"; done
Vysvětlení:
-
git ls-files -z
seznam souborů v úložišti. Jako další parametr bere volitelný vzor, který může být užitečný v některých případech, pokud chcete omezit operaci na určité soubory/adresáře. Jako alternativu můžete použítfind -print0 ...
nebo podobné programy pro seznam dotčených souborů – jen se ujistěte, že generujeNUL
-oddělené položky. -
while IFS= read -rd '' f; do ... done
iteruje záznamy a bezpečně zpracovává názvy souborů, které obsahují mezery a/nebo nové řádky. -
tail -c1 < "$f"
přečte poslední znak ze souboru. -
read -r _
ukončí se s nenulovým stavem ukončení, pokud chybí nový řádek na konci. -
|| echo >> "$f"
připojí k souboru nový řádek, pokud byl stav ukončení předchozího příkazu nenulový.