Wie wende ich dos2unix rekursiv auf den gesamten Inhalt eines Ordners an?

11

Gibt es eine Möglichkeit, den dos2unixBefehl so anzuwenden , dass er für alle Dateien in einem Ordner und seinen Unterordnern ausgeführt wird? man dos2unixzeigt keine -roder ähnliche Optionen, die dies einfach machen würden?

Alex Kinman
quelle

Antworten:

18

find /path -type f -print0 | xargs -0 dos2unix --

Stefan Paletta
quelle
2
Keine Sorge, dos2unixüberspringt standardmäßig Binärdateien.
Walf
3

Das Überspringen von Binärdateien und versteckten Dateien war für mich wichtig:

Dieser hat gut für mich funktioniert:

find . -type f -not -path '*/\.*' -exec grep -Il '.' {} \; | xargs -d '\n' -L 1 dos2unix -k

Was bedeutet: Finden Sie alle nicht versteckten Dateien rekursiv im aktuellen Verzeichnis, verwenden Sie dann grep, listen Sie alle nicht-binären (-I) nicht leeren Dateien auf und leiten Sie sie einzeln in xargs (durch Zeilenumbrüche getrennt) weiter dos2unix und behalten Sie den ursprünglichen Zeitstempel.

Siehe auch:

https://github.com/mdolidon/endlines

Phyatt
quelle
2

Mit find können Sie alle Dateien in einer Verzeichnisstruktur finden, die Sie mit Ihrem Befehl dos2unix ausführen möchten

find /path/to/the/files -type f -exec dos2unix {} \;

Werfen Sie einen Blick auf die Manpages, um zu finden. Es gibt viele Optionen, mit denen Sie angeben können, was ausgewertet wird

JayJay
quelle
Das hat nicht funktioniert.
Alex Kinman
2
Seien Sie SEHR vorsichtig, wenn dies irgendwo im Dateibaum ein .git-Verzeichnis gibt ... es hat mein lokales Git-Repository beschädigt.
Aaron_H
1

Verwenden Sie einen Platzhalter. So: (Wenn Sie im Ordner sind)

dos2unix *

oder wenn Sie sich außerhalb des Ordners befinden, gehen Sie wie folgt vor:

dos2unix /path/to/folder/*
Anzeigename
quelle
1

Verwenden von bash:

shopt -s globstar
dos2unix **

Die globstarShell-Option in bashermöglicht die Verwendung des **Globs. Dies funktioniert genauso *, stimmt jedoch mit /Pfadnamen überein (daher auch mit Namen in Unterverzeichnissen). Dies würde in einem Verzeichnis funktionieren, das eine moderate Anzahl von Dateien in seinen Unterverzeichnissen enthält (nicht viele Tausend).

In den zshund yashMuscheln (mit set -o extended-globin yash) würden Sie tun

dos2unix **/*
Kusalananda
quelle