Wie automatisieren von dos2unix über shell-script?
Habe ich einen Haufen xml-Dateien in einem Verzeichnis, das müssen die dos2unix Befehl ausgeführt und neue Dateien Hinzugefügt werden jeder so oft. Ich Anstelle des manuellen dos2unix Befehl auf die einzelnen Dateien jedes mal würde ich gerne automatisieren Sie alle mit einem Skript. Ich habe noch nie sah ein shell-Skript in meinem Leben, aber so weit ich das aus, was ich gelesen habe auf ein paar tutorials:
FILES=/tmp/testFiles/*
for f in $FILES
do
fname=`basename $f`
dos2unix *.xml $f $fname
done
Jedoch bekomme ich immer wieder die "Anwendung" - Ausgang angezeigt. Ich denke, das problem ist, dass ich nicht die Zuordnung der Namen für die neue Datei korrekt (fname). Kann mir jemand helfen.
Dank,
Alan
InformationsquelleAutor Alan Smith | 2012-07-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Grund, Sie bekommen eine Meldung über die Verwendung ist, dass
dos2unix
nicht die zusätzlichen Argumente, die Sie liefern. Es wird jedoch akzeptiert mehrere Dateinamen (auch über globs). Sie brauchen nicht eine Schleife, es sei denn, du bist der Verarbeitung von mehr Dateien, als angenommen werden kann auf der Kommandozeile.Sollte alles, was Sie brauchen, es sei denn, Sie brauchen Rekursion:
(für GNU find)
InformationsquelleAutor Dennis Williamson
Wenn alle Dateien in einem Verzeichnis (keine Rekursion erforderlich), dann sind Sie fast da.
Standardmäßig
dos2unix
sollte konvertieren in platzieren und das original überschreiben.Wenn die Rekursion benötigt wird, müssen Sie die
find
:Die Arbeit wird auf alle Dateien mit der Endung mit
.xml
im/tmp/testFiles/
und alle seine Unterverzeichnisse.Wenn kein anderer Schritt erforderlich sind, können Sie überspringen die shell-Schleife ganz:
Nicht-rekursiv:
Und für rekursiv:
In Ihrer ursprünglichen Befehl ich sehe, Sie finden den Namen jeder Datei Namen und versucht sich zu übergeben,
dos2unix
, aber Ihre Absicht ist nicht klar. Später, in einem Kommentar, Sie sagen, Sie wollen einfach nur die Dateien überschreiben. Meine Lösung führt die Konvertierung erstellt keine backups und überschreibt das original mit der konvertierten version. Ich hoffe, das war Ihre Absicht.Ich sehe, dass Sie Recht haben. Ich habe entfernt diesen Kommentar, danke für die Korrektur.
InformationsquelleAutor Sorpigal
Das Ergebnis wird gespeichert in der
converted/
Unterverzeichnis.Den Bau
${f/testFiles\//testFiles\/converted\/}
(Dank Rush)oder
sed
wird hier verwendet, um addconverted/
vor dem Namen der Datei:Sie brauchen nicht
sed
. Sie können es mit${f/testFiles\//testFiles\/converted\/}
Jungs, ich will die Dateien überschreiben, so verschieben die neuen Dateien in einem anderen Verzeichnis ist nicht ein Problem. Der obige Befehl nicht funktioniert. Irgendwelche anderen Vorschläge? Danke.
Wie wäre
find /tmp/testFiles/ -maxdepth 1 -type f -exec dos2unix {} +
(wenn Sie nicht wollen, ein backup zu haben)?Diese Frage ist tagged
bash
und ist nicht markiertsh
odershell
oderposix-sh
, so denke ich, dass bashisms akzeptabel sind.InformationsquelleAutor Igor Chubin
Es ist nicht klar, welche Implementierung der dos2unix, die Sie verwenden. Unterschiedliche Implementierungen erfordern unterschiedliche Argumente. Es gibt viele verschiedene Implementierungen.
Unter RedHat/Fedora/Suse Linux könnte man nur geben
Unter SunOS müssen Sie eine Eingabe-und Ausgabe-Datei-Namen, und das obige Kommando würde zerstören mehrere Ihrer Dateien.
Welche version verwenden Sie?
Grüße,
Erwin
InformationsquelleAutor Erwin Waterlander