Ich muss ein ganzes Verzeichnis konvertieren mit dos2unix
. Ich kann nicht herausfinden, wie man das macht.
Antworten
Zu viele Anzeigen?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
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
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.
- See previous answers
- Weitere Antworten anzeigen