Wenn ich Versionskontrollsysteme verwende, ärgere ich mich über das Geräusch, wenn das Diff No newline at end of file
sagt .
Also habe ich mich gefragt:Wie füge ich am Ende einer Datei einen Zeilenumbruch hinzu, um diese Nachrichten loszuwerden?
Akzeptierte Antwort:
Um ein Projekt rekursiv zu bereinigen, verwende ich diesen Einzeiler:
git ls-files -z | while IFS= read -rd '' f; do tail -c1 < "$f" | read -r _ || echo >> "$f"; done
Erklärung:
-
git ls-files -z
listet Dateien im Repository auf. Es nimmt ein optionales Muster als zusätzlichen Parameter, was in einigen Fällen nützlich sein kann, wenn Sie die Operation auf bestimmte Dateien/Verzeichnisse beschränken möchten. Alternativ können Siefind -print0 ...
verwenden oder ähnliche Programme, um betroffene Dateien aufzulisten – stellen Sie nur sicher, dass esNUL
ausgibt -getrennte Einträge. -
while IFS= read -rd '' f; do ... done
iteriert durch die Einträge und behandelt sicher Dateinamen, die Leerzeichen und/oder Zeilenumbrüche enthalten. -
tail -c1 < "$f"
liest das letzte Zeichen aus einer Datei. -
read -r _
beendet sich mit einem Nicht-Null-Beendigungsstatus, wenn ein abschließender Zeilenumbruch fehlt. -
|| echo >> "$f"
fügt eine neue Zeile an die Datei an, wenn der Exit-Status des vorherigen Befehls nicht Null war.