Usando i sistemi di controllo della versione mi infastidisce il rumore quando la differenza dice No newline at end of file
.
Quindi mi chiedevo:come aggiungere una nuova riga alla fine di un file per eliminare quei messaggi?
Risposta accettata:
Per sanificare ricorsivamente un progetto utilizzo questo oneliner:
git ls-files -z | while IFS= read -rd '' f; do tail -c1 < "$f" | read -r _ || echo >> "$f"; done
Spiegazione:
-
git ls-files -z
elenca i file nel repository. Richiede un modello opzionale come parametro aggiuntivo che potrebbe essere utile in alcuni casi se si desidera limitare l'operazione a determinati file/directory. In alternativa, puoi usarefind -print0 ...
o programmi simili per elencare i file interessati:assicurati solo che emettaNUL
-voci delimitate. -
while IFS= read -rd '' f; do ... done
scorre le voci, gestendo in sicurezza i nomi di file che includono spazi bianchi e/o nuove righe. -
tail -c1 < "$f"
legge l'ultimo carattere da un file. -
read -r _
esce con uno stato di uscita diverso da zero se manca una nuova riga finale. -
|| echo >> "$f"
aggiunge una nuova riga al file se lo stato di uscita del comando precedente era diverso da zero.