442 Stimmen

Wie kann ich dos2unix auf ein ganzes Verzeichnis anwenden?

Ich muss ein ganzes Verzeichnis konvertieren mit dos2unix . Ich kann nicht herausfinden, wie man das macht.

807voto

CyberDem0n Punkte 13945

find . -type f -print0 | xargs -0 dos2unix

Findet rekursiv alle Dateien im aktuellen Verzeichnis und ruft für diese Dateien den Befehl dos2unix auf

96voto

nikc Punkte 2448

Wenn es sich um ein großes Verzeichnis handelt, sollten Sie den Betrieb mit mehreren Prozessoren in Betracht ziehen:

find . -type f -print0 | xargs -0 -n 1 -P 4 dos2unix 

Dabei wird jeweils 1 Datei weitergegeben, und es werden 4 Prozessoren verwendet.

34voto

friederbluemle Punkte 27915

Ein häufiger Anwendungsfall scheint zu sein Standardisierung der Zeilenenden für alle Dateien, die in ein Git-Repository übertragen werden :

git ls-files -z | xargs -0 dos2unix

Beachten Sie, dass bestimmte Dateien (z. B. *.sln , *.bat ) sind nur auf Windows-Betriebssystemen verwendet werden und sollten behalten. die CRLF Ende:

git ls-files -z '*.sln' '*.bat' | xargs -0 unix2dos

Falls erforderlich, verwenden Sie .gitattributes

30voto

Mathias Dolidon Punkte 3545

Da ich mit dos2unix nicht zufrieden war, habe ich mein eigenes einfaches Dienstprogramm entwickelt. Abgesehen von einigen Vorteilen in Bezug auf Geschwindigkeit und Vorhersagbarkeit ist die Syntax auch etwas einfacher:

endlines unix *

Und wenn Sie möchten, dass es bis in Unterverzeichnisse geht (versteckte Verzeichnisse und Nicht-Text-Dateien werden übersprungen) :

endlines unix -r .

endlines ist hier erhältlich https://github.com/mdolidon/endlines

24voto

Kyle Strand Punkte 15027

Es ist wahrscheinlich am besten, versteckte Dateien und Ordner zu überspringen, wie z. B. .git. Anstatt also die find wenn Ihr bash Version aktuell genug ist oder ob Sie die zsh einfach tun:

dos2unix **

Beachten Sie, dass dies für Bash erforderlich ist:

shopt -s globstar

...., aber diese Funktion ist so nützlich, dass Sie sie einfach in Ihre Website aufnehmen sollten. .bashrc sowieso.

Wenn Sie nicht versteckte Dateien und Ordner auslassen möchten, aber trotzdem nicht mit find (und ich würde es Ihnen nicht verübeln), können Sie ein zweites rekursives-glob-Argument angeben, das mit nur versteckte Einträge:

dos2unix ** **/.*

Beachten Sie, dass in beiden Fällen der glob expandiert, um Verzeichnisse einzuschließen, so dass Sie die folgende Warnung sehen werden (möglicherweise mehrmals): Skipping <dir>, not a regular file.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X