%20und%20benennen%20Sie%20die%20Datei%20dann%20basierend%20auf%20der%20Zeichenfolge%20um..png)
Ich bin kein UNIX-Typ, verstehe aber genug, um hier und da kleine Skripte zu schreiben, mit Ausnahme dieses einen, für das ich persönlich möglicherweise nicht genügend Zeit aufbringen kann.
Ich habe etwa 2000 Dateien in einem Verzeichnis, für die Folgendes getan werden muss:
- Jede Datei enthält etwa 3000 Datensätze, die sich jedoch alle in einer Zeile der Datei befinden und durch das Zeilenumbruchzeichen Strg+M getrennt sind. Diese müssen getrennt werden.
- Jede Datei hat in der ersten Zeile das entsprechende Datum, an dem sie erstellt wurde, beginnend beim 8. bis zum 14. Zeichen. Dieses Datum muss verwendet werden, um die Datei in XXX_JJJJMMTT_AAA.txt umzubenennen.
Antwort1
Die meisten Systeme umfassen ein Tool namens , dos2unix
das Sie in einem Skript „erstellen“ können, um die Dateien zu verarbeiten, für die Sie diesen Vorgang ausführen müssen.
Wenn sich alle Dateien in einem Verzeichnis befinden, können Sie find
sie mithilfe von lokalisieren und dann jede Datei einzeln wie folgt bearbeiten:
$ find . -type f -exec dos2unix {} +
Beispiel
Angenommen, ich hätte diese Verzeichnisstruktur
$ tree
.
|-- afile
|-- dir1
| `-- afile
`-- dir2
`-- afile
Mit unserer find
Technik können wir bestätigen, dass es sich bei allen Dateien um „DOS“-Dateien mit der Zeilenbegrenzung durch CRLF handelt.
$ find . -type f -exec file {} +
./dir2/afile: ASCII text, with CRLF line terminators
./afile: ASCII text, with CRLF line terminators
./dir1/afile: ASCII text, with CRLF line terminators
Und reparieren Sie alles wie folgt:
$ find . -type f -exec dos2unix {} +
dos2unix: converting file ./dir2/afile to Unix format ...
dos2unix: converting file ./afile to Unix format ...
dos2unix: converting file ./dir1/afile to Unix format ...
Das Ergebnis sind nur Unix-Dateien:
$ find . -type f -exec file {} +
./dir2/afile: ASCII text
./afile: ASCII text
./dir1/afile: ASCII text