Entpacken Sie viele ZIP-komprimierte Dateien mit Linux-Befehlen und hängen Sie sie an UTF8 an

Ich stieß auf eine Gruppe von Dateien, die auf den ersten Blick problematisch zu sein schienen, aber ich konnte alle Dateien dekomprimieren, in UTF8 konvertieren und sie einfacher als erwartet zu einer Datei kombinieren. ist.

Umgebung

Backup ist absolut

Erstellen Sie ein Backup, damit Sie die ursprüngliche Zip-Datei versehentlich löschen oder überschreiben können. Es ist möglicherweise nicht in Ordnung, wenn Sie denken, dass es in Ordnung ist. Tun Sie es also unbedingt.

Erstes Abtauen

Entpacken Sie zunächst die vielen ZIP-Dateien zusammen. Dies kann einfach mit dem Befehl find erfolgen. Durch Hinzufügen von -j wird die Verzeichnisstruktur ignoriert und dekomprimiert, und die Option -B wird hinzugefügt, um ein Überschreiben zu verhindern, selbst wenn der Dateiname zu diesem Zeitpunkt dupliziert wird.

Es scheint, dass Sie den Dateinamen in SJIS konvertieren können, indem Sie "-O sjis" mit "unzip" angeben, aber ich habe viele Male festgestellt, dass es nicht funktioniert hat, daher verwende ich es hier nicht.

Entpacken Sie die ZIP-Datei


mkdir work #Arbeitsverzeichnis erstellen
cd work
find ../ -name '*.zip' -exec unzip -j -B {} \;

Sie können auch ls und xargs anstelle von find verwenden.

Entpacken Sie die ZIP-Datei (mit ls und xargs).


mkdir work #Arbeitsverzeichnis erstellen
cd work
ls ../*.zip | xargs -I{} unzip -j -B {}

Was ist, wenn die ZIP-Datei verschachtelt ist?

Als ich eine ZIP-Datei erstellt habe, war eine weitere ZIP-Datei darin. Das ist eine häufige Geschichte, aber in diesem Fall dekomprimieren Sie sie erneut wie folgt. Wenn die ZIP-Datei nach dem Dekomprimieren erneut ausgegeben wird, führen Sie sie erneut aus, bis Sie sich wohl fühlen. Je mehr Sie es ausführen, desto mehr Dateien haben Sie und desto mehr Duplikate haben Sie, aber ich plane, doppelte Datensätze später zu löschen. Daher denke ich, dass es an dieser Stelle keine Rolle spielt, wie oft Sie es ausführen, um Duplikate zu erstellen. ..

Wenn Sie nicht wie * .zip angeben, können andere Dateien als das ZIP-Format nicht dekomprimiert werden, und es tritt nur ein Fehler auf. Ich denke, dass dies in Ordnung ist. Da der Dateiname in der Vergangenheit in SJIS verstümmelt war, wird er nicht mit * .zip getroffen Weil da etwas war.

Entpacken Sie die ZIP-Datei (wenn die ZIP-Datei verschachtelt ist)


find ./ -type f -exec unzip -j -B {} \;

Es gibt andere Möglichkeiten, ls und xargs zu verwenden, aber ich denke, es ist besser, eine Methode zu wählen, die für Sie leicht zu verstehen ist, als sie kurz zu schreiben.

Entpacken Sie die ZIP-Datei (mit ls und xargs).


ls * | xargs -I{} unzip -j -B {}

Löschen Sie nicht benötigte ZIP-Dateien

Wenn Sie es vollständig entpacken, ist es problematisch, wenn die ZIP-Datei erhalten bleibt. Löschen Sie sie daher. Wenn Sie nach der Erweiterung urteilen können, können Sie "rm" verwenden, aber dieses Mal werde ich versuchen, die Datei zu finden und zu löschen, deren Inhalt im ZIP-Format vorliegt, vorausgesetzt, dass dies nicht der Fall ist.

Dies ist nicht allzu schwierig und es ist überraschend einfach, mit "file" und "grep" zu arbeiten. Überprüfen Sie die Zieldatei für alle Fälle, bevor Sie sie löschen. Wenn es viele Dateien gibt, wird es viel Zeit in Anspruch nehmen. Wenn Sie also nach dem Dateinamen urteilen können, ist es meiner Meinung nach besser, sie mit rm * .zip zu löschen.

Bestätigung der ZIP-Zieldatei


file * | grep 'Zip archive' 

Führen Sie das Löschen der ZIP-Datei durch


file * | grep 'Zip archive' | sed 's/: *Zip archive.*//' | xargs -I{} rm {}

Benennen Sie die Datei in UTF8 um

Wenn der dekomprimierte Dateiname SJIS lautet, wird er verstümmelt. Ändern Sie daher alle Dateinamen in UTF8. Mit dem Befehl "convmv" ist das ganz einfach. Wenn Sie nicht über "convmv" verfügen, installieren Sie es mit "sudo apt install convmv".

Übrigens werden in diesem Fall die Dateien später zu einer zusammengefasst, sodass der Dateiname tatsächlich alles sein kann. Selbst wenn Sie es nicht gut konvertieren können, müssen Sie sich nicht daran halten, und selbst wenn die Charaktere verstümmelt sind, ist es fast in Ordnung.

Konvertieren Sie den Dateinamen in UTF8


convmv -f sjis -t utf8 --notest *

Ändern Sie den Inhalt der Datei in UTF8 und den Zeilenvorschubcode in LF

Ich benutze das bekannte nkf. Wenn es nicht installiert ist, installieren Sie es mit sudo apt install nkf. nkf ist praktisch, da Sie den Zeichencode konvertieren und gleichzeitig den Zeilenvorschubcode ändern können. Wenn es viele Dateien gibt, wird es "Zu viele offene Dateien" sein, also verwende ich "find", aber wenn es nur wenige Dateien gibt, kann es meiner Meinung nach als "nkf ~ *" geschrieben werden.

Konvertieren Sie den Dateiinhalt in UTF8 (Teil 1).,Verwenden Sie find)


find ./ -type f -exec nkf -Lu -w --overwrite {} \;

Konvertieren Sie den Dateiinhalt in UTF8 (Teil 2).,Wenn es nur wenige Dateien gibt)


nkf -Lu -w --overwrite *

Konvertieren Sie den Dateiinhalt in UTF8 (Teil 3).,Mit ls und xargs)


ls * | xargs -I{} nkf -Lu -w --overwrite {}

Fügen Sie alle Dateien zusammen, entfernen Sie Duplikate, komprimieren Sie sie und speichern Sie sie in einer Datei

Es ist möglicherweise nicht so schwierig, wenn Sie wissen, dass "der Elementname in der ersten Zeile aller CSV-Dateien enthalten ist, sodass Sie sie nicht einfach mit" cat "anhängen können". Es ist so, als würden die Daten (Header) in die erste Zeile und die Daten mit dem Header in der ersten Zeile aus jeder Datei entfernt.

Gzip-Komprimierung durch Zusammenkleben aller Dateien und Entfernen von Duplikaten


(cat * | head -1; ls * | xargs -I{} sed '1d' {} | sort | uniq) | gzip > all.csv.gz

Wenn Sie den "M-Befehl" von "NYSOL" verwenden können, können Sie übrigens wie folgt schreiben. Der M-Befehl von NYSOL kann nicht nur CSV-Dateien verarbeiten, sondern auch große Dateien mit wenig Speicher, sodass die Verwendung sehr praktisch ist.

Gzip-Komprimierung durch Zusammenfügen aller Dateien mit dem Befehl M, um Duplikate zu entfernen


mcat i=* | muniq k='*'  | mfldname -q | gzip > all.csv.gz

Es ist gzip-komprimiert, aber wenn Sie die Größe nach der Dekomprimierung überprüfen möchten, sieht es wie folgt aus.

Überprüfen Sie die Größe nach dem Entfalten


zcat all.csv.gz | wc -l -c

Größenbestätigung nach Erweiterung (Ausführungsergebnis)


$ zcat all.csv.gz | wc -l -c
 748654 229449752

Wenn Sie die gzip-komprimierte Datei entpacken, sehen Sie, dass die Anzahl der Datensätze ungefähr 740.000 und die Dateigröße ungefähr 200 MB beträgt.

Warum komprimieren?

Liegt es daran, dass kleinere Dateien einfacher zu handhaben sind? Es hängt vom Inhalt der Datei ab, aber ich denke, die Größe wird ungefähr 1/8 betragen, und wenn es R data.table :: fread ist, kann es wie data.table :: fread ("zcat all.csv.gz") geschrieben werden. Ist es nicht schwierig zu benutzen, selbst wenn es gzip-komprimiert ist?

Recommended Posts

Entpacken Sie viele ZIP-komprimierte Dateien mit Linux-Befehlen und hängen Sie sie an UTF8 an
Wie man viele Pipelines zusammenbaut und sofort weglegt
Befehle und Dateien zum Überprüfen der Version von CentOS Linux
Anfänger! Grundlegende Linux-Befehle und Verwendung!
Ich habe viele Dateien für die RDP-Verbindung mit Python erstellt
Ist es möglich, ein Pre-Listing-Unternehmen zu gründen und mit Aktienoptionen ein Vermögen zu machen?
Ersetzen Sie den Verzeichnisnamen und den Dateinamen im Verzeichnis zusammen mit einem Linux-Befehl.
Verwenden Sie shutil, um alle Ordner mit einer kleinen Anzahl von Dateien zu löschen
[Linux] Ein Befehl zum Abrufen einer Liste der in der Vergangenheit ausgeführten Befehle
[Linux] Unterteilen von Dateien und Ordnern
Die Geschichte eines virtuellen Planetariums [bis es einem Anfänger gelingt, ein Modell mit einem Skript zu erstellen]
Verbinde viel Python oder und und
Geben Sie die Start- und Endpositionen der Dateien an, die in qiitap enthalten sein sollen
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
Skript zum Twittern mit Vielfachen von 3 und Zahlen mit 3 !!
[Linux-Befehl] Ein Memorandum häufig verwendeter Befehle
Was tun, wenn pvcreate viel WARNUNG erzeugt und nicht erstellt werden kann?
Memorandum über Befehle, Pakete, Begriffe usw., die unter Linux verwendet werden (von Zeit zu Zeit aktualisiert)
Wenn Sie ein Mann sind, halten Sie einfach die Klappe und sagen Sie ihm, er soll mit einem Stock aufstehen