PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Brauche kleines Shellskript: dos2unix rekursiv



axeljaeger
16-08-2004, 15:45
Hallo,
ich habe einen umfangreichen Dateibaum mit Textdateien mit Windowszeilenende. Die sollen nach unix konvertiert werden. Ich habe da Versuche mit dos2unix angestellt, aber das stirbt schon, wenn man dos2unix * sagt, mit der Begründung, dass es Probleme mit dem Konvertieren von <beliebiges Verzeichnis> gab. Ich bin nicht so gut im Shellskripten, vielleicht kann sich jemand erbarmen und die paar Zeilen schnell hinhacken, Vielen Dank im Vorraus.

Blackhawk
16-08-2004, 16:10
macht du einfach:

find /home/doedel -name \*.txt -exec dos2ux {} \;

axeljaeger
16-08-2004, 16:13
Die Textdateien haben dummerweise ettliche verschiedene Endungen: sh, cpp, h, in, alles Mögliche. Ist ein CVS-Verzeichnis.

Edit: Mein Gedanke ist ein Skript, das ich in $PATH irgendwo installiere und dass mit foreach oder ähnlichem für jede Datei überprüft, ob es ein Verzeichnis ist, wenn ja cd ins verzeichnis macht und sich dann selbst wieder im Unterverzeichnis startet und wenn nicht, dos2unix probiert.

r00t043
16-08-2004, 17:30
find /home/doedel -type f -exec dos2unix {} \;

peschmae
16-08-2004, 19:16
Wenn nicht sicher alles Textdateien sind könnte ein Konstrukt in der Art nützlich sein:



for f in $(find -type f); do file $f | grep -q ASCII && dos2unix $f; done


MfG Peschmä

axeljaeger
16-08-2004, 20:10
for f in $(find -type f); do file $f | grep -q ASCII && dos2unix $f; done


Einfach im Wurzelverzeichnis meines Dateibaumes aufrufen?

peschmae
16-08-2004, 20:26
Ja. Du kannst natürlich auch bei find den Pfad angeben wie in den vorhergehenden Beispielen.

MfG Peschmä

axeljaeger
16-08-2004, 20:51
Danke peschmae, ich hab es gerade ausprobiert, es funktioniert ganz gut, einige Dateien vergisst es aber, z.B. welche, die mit .sh enden. Trotzdem danke. Die paar konnte ich auch mit der Hand machen.

bash_azubi
17-08-2004, 08:12
Für das nächste mal:
Übertrage die Dateien im Ascii FTP-Modus - dann passiert sowas auch nicht

peschmae
17-08-2004, 09:20
Es ging um ein CVS-Verzeichnis.

MfG Peschmä

axeljaeger
17-08-2004, 14:08
Richtig. Um genau zu sein um TortoiseCVS.

anda_skoa
17-08-2004, 15:47
Für das nächste mal:
Übertrage die Dateien im Ascii FTP-Modus - dann passiert sowas auch nicht
Du meinst im Binary Modus, denn ASCII ändert ja die Line Ends.

Ciao,
_

Psycho0815
18-08-2004, 05:31
das er .sh dateien vergisst liegt daran das file diese nicht als ASCII identifiziert sondern als shellscript.

peschmae
18-08-2004, 08:48
Ja, sicher.

MfG Peschmä

axeljaeger
18-08-2004, 10:06
Kann man diesen Sonderfall noch vorsehen?

peschmae
18-08-2004, 10:27
Ja sicher:


for f in $(find -type f); do file $f | grep -q -E "ASCII|shell script" && dos2unix $f; done


Finde ich noch merkwürdig dass file da nicht auch ein ASCII drin hat, wenns ein Shellscript ist. Macht die Sache irgendwie komplizierter.

MfG Peschmä