GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist der beste Weg, um Dateien nach dem Teilen wieder zusammenzuführen?

Genau das ist cat wurde für gemacht. Da es eines der ältesten GNU-Tools ist, halte ich es für sehr unwahrscheinlich, dass ein anderes Tool dies schneller/besser macht. Und es ist keine Rohrleitung - Es leitet nur die Ausgabe um.


Unter der Haube

Es gibt keinen effizienteren Weg, als die erste Datei zu kopieren, dann die zweite Datei danach zu kopieren und so weiter. Beide DOS copy und cat mach das.

Jede Datei wird unabhängig von anderen Dateien auf der Platte gespeichert. Fast jedes Dateisystem, das zum Speichern von Daten auf einem festplattenähnlichen Gerät entwickelt wurde, arbeitet blockweise. Hier ist eine stark vereinfachte Darstellung dessen, was passiert:Die Festplatte wird in Blöcke von beispielsweise 1 KB unterteilt, und das Betriebssystem speichert für jede Datei die Liste der Blöcke, aus denen sie besteht. Die meisten Dateien sind keine ganze Zahl von Blöcken lang, daher ist der letzte Block nur teilweise belegt. In der Praxis haben Dateisysteme viele Optimierungen, wie das Teilen des letzten Teilblocks zwischen mehreren Dateien oder das Speichern von „Blöcken 46798 bis 47913“ statt „Block 46798, Block 46799, …“. Wenn das Betriebssystem eine neue Datei erstellen muss, sucht es nach freien Blöcken. Die Blöcke müssen nicht fortlaufend sein:Wenn nur die Blöcke 4, 5, 98 und 178 frei sind, können Sie immer noch eine 4kB-Datei speichern. Die Verwendung von Blöcken, anstatt auf die Byte-Ebene zu gehen, hilft dabei, freie Blöcke für eine neue oder wachsende Datei erheblich schneller zu finden, und reduziert die Probleme aufgrund von Fragmentierung, wenn Sie viele Dateien erstellen oder vergrößern und löschen oder verkleinern (wobei eine zunehmende Anzahl von Löcher).

Sie könnten Teilblöcke in der Mitte der Datei unterstützen, aber das würde die Komplexität erheblich erhöhen, insbesondere wenn Sie nicht sequenziell auf Dateien zugreifen:Um zum 10340. Byte zu springen, könnten Sie nicht mehr zum 100. Byte des 11. Blocks springen um die Länge jedes dazwischenliegenden Blocks zu überprüfen.

Aufgrund der Verwendung von Blöcken können Sie nicht einfach zwei Dateien zusammenfügen, da die erste Datei im Allgemeinen in der Mitte des Blocks endet. Sicher, Sie könnten einen Sonderfall haben, aber nur, wenn Sie beim Verketten beide Dateien löschen möchten. Das wäre eine sehr spezifische Handhabung für eine seltene Operation. Eine solche spezielle Behandlung lebt nicht von alleine, da auf einem typischen Dateisystem auf viele Dateien gleichzeitig zugegriffen wird. Wenn Sie also eine Optimierung hinzufügen möchten, müssen Sie sorgfältig überlegen:Was passiert, wenn ein anderer Prozess eine der beteiligten Dateien liest? Was passiert, wenn jemand versucht, A und B zu verketten, während jemand A und C verkettet? Usw. Alles in allem wäre diese seltene Optimierung eine enorme Belastung.

Alles in allem können Sie das Zusammenführen von Dateien nicht effizienter gestalten, ohne an anderer Stelle große Abstriche zu machen. Es lohnt sich nicht.

Vom Teilen und Verbinden

split und cat sind einfache Methoden zum Aufteilen und Zusammenführen von Dateien. split kümmert sich um die Erstellung von Dateien, die in alphabetischer Reihenfolge benannt sind, sodass cat * funktioniert für den Beitritt.

Ein Nachteil von cat für das Fügen ist, dass es nicht robust gegenüber üblichen Fehlermodi ist. Wenn eine der Dateien abgeschnitten ist oder fehlt, cat wird sich nicht beschweren, Sie erhalten nur eine beschädigte Ausgabe.

Es gibt Komprimierungsprogramme, die mehrteilige Archive erzeugen, wie z. B. zipsplit und rar -v . Sie sind nicht sehr unixy, da sie zusätzlich zum Teilen komprimieren und packen (mehrere Dateien zu einer zusammenfügen) (und umgekehrt zusätzlich zum Verbinden entpacken und dekomprimieren). Aber sie sind insofern nützlich, als sie bestätigen, dass Sie alle Teile haben und dass die Teile vollständig sind.


Anscheinend sollte es einen effizienteren Weg geben, als den gesamten Inhalt durch den stdin des Systems zu leiten / stdout

Nur dass das nicht wirklich passiert. Die Shell verbindet die Standardausgabe von cat direkt in die geöffnete Datei, was bedeutet, dass das "Durchlaufen von stdout" dasselbe ist wie das Schreiben auf die Festplatte.


Linux
  1. Was ist der beste VPS:Windows oder Linux?

  2. Wie verwendet man inotify richtig?

  3. Was ist der richtige Weg, um Tabulatoren in sed einzufügen?

  4. Was ist der beste Weg, um ein Flash-Laufwerk mit vielen bootfähigen Dingen zu erstellen

  5. Ich habe gerade /bin gelöscht. Was ist der beste Weg, um sich zu erholen?

Die 10 besten Linux-Bücher zum Lesen im Jahr 2019

Was ist der schnellste Weg, zwei oder mehr Dateien in Linux zu kombinieren?

Was ist der schnellste Weg, um ein Skript auszuführen?

Was ist der beste Weg, um eine Umgebungsvariable in .bashrc festzulegen?

Was ist der beste Weg, um zu überprüfen, ob ein Volume in einem Bash-Skript gemountet ist?

Was ist der beste Weg, um Informationen über aktuell nicht gemountete Laufwerke zu erhalten?