dateien zusammenfühern
dateien zusammenfühern
Hi!
gibt es einen Befehl, mit dem man 2 Dateien kompromisslos zusammenführen kann? Ich weiß, man könnte mittels cat und Ausgabeumleitung arbeiten, aber ich möchte zwei Dateien direkt verschmelzen. Jede ist relativ groß und die Platte komplett gefüllt...
mfg
gibt es einen Befehl, mit dem man 2 Dateien kompromisslos zusammenführen kann? Ich weiß, man könnte mittels cat und Ausgabeumleitung arbeiten, aber ich möchte zwei Dateien direkt verschmelzen. Jede ist relativ groß und die Platte komplett gefüllt...
mfg
Re: dateien zusammenfühern
Aber genau das machst du doch mit cat!bonbon2k6 hat geschrieben:Ich weiß, man könnte mittels cat und Ausgabeumleitung arbeiten, aber ich möchte zwei Dateien direkt verschmelzen.
Vllt. solltest du ein gepacktes Archiv benutzen Stichwort: tar, bzip2, gzip.
Gruß cirrussc
--------------------
„Der Mensch steigert zur Zeit die Nutzung dessen, was seiner Willkür unterliegt - und kommt sich sehr klug dabei vor.“ H. Gruhl
--------------------
„Der Mensch steigert zur Zeit die Nutzung dessen, was seiner Willkür unterliegt - und kommt sich sehr klug dabei vor.“ H. Gruhl
Re: dateien zusammenfühern
cat datei1 datei2 > /dev/externe-USB-Platte ?
Re: dateien zusammenfühern
naja ne. ihr habt den witz des cat - befehles noch nicht verstanden...
cat listet den Inhalt einer Datei und leitet ihn eben von der StandartAusgabe in eine Datei...
Ich habe eine Platte 80 GB und auf dieser sind 2 Dateien zu jeweils 40GB...
Wenn man dann cat datei1 >> datei2 ausführen WÜRDE, würde es abbrechen
Warum? Platte hat nur 80 GB. Was ich möchte ist: datei1 (40gb) und datei2 (40gb) zu einer datei, z.B. dateigesamt, zusammenfügen...
Ich glaube aber, dass es dafür keine direkte funktion zu geben scheint.
mfg
cat listet den Inhalt einer Datei und leitet ihn eben von der StandartAusgabe in eine Datei...
Ich habe eine Platte 80 GB und auf dieser sind 2 Dateien zu jeweils 40GB...
Wenn man dann cat datei1 >> datei2 ausführen WÜRDE, würde es abbrechen

Ich glaube aber, dass es dafür keine direkte funktion zu geben scheint.
mfg
Re: dateien zusammenfühern
Das klingt unlogisch. Warum lässt du die 2 Dateien nicht einfach, der Platzbedarf erhöht sich doch nur bei vielen kleinen Dateien.bonbon2k6 hat geschrieben:Was ich möchte ist: datei1 (40gb) und datei2 (40gb) zu einer datei, z.B. dateigesamt, zusammenfügen...
Zudem musst du dann noch ein Programm finden was mit so einer Verstümmelten Datei was anfangen kann (blind zusammengepappt).
Gruß cirrussc
--------------------
„Der Mensch steigert zur Zeit die Nutzung dessen, was seiner Willkür unterliegt - und kommt sich sehr klug dabei vor.“ H. Gruhl
--------------------
„Der Mensch steigert zur Zeit die Nutzung dessen, was seiner Willkür unterliegt - und kommt sich sehr klug dabei vor.“ H. Gruhl
Re: dateien zusammenfühern
hi,
debugfs -- du brauchst nur die Blockliste aus der Inode der
zweiten Datei in die Inode der ersten zu kopieren. Dann noch
die zweite Inode freigeben (auch in der Bitmap) -- fertig
Falls die große Datei zusätzliche indirekte Blöcke für die Blockliste
braucht, mußt du die entsprechend reservieren. Und dann mußt
du dich noch um alle die Zeiger, Listen, Bitmaps, Prüfsummen
usw. kümmern, die ich jetzt vergessen hab
In dieser einen großen Datei ist jetzt allerdings in der Mitte ein
"Loch" (besser gesagt ein paar zusätzliche Bytes), weil die erste
Datei höchstwahrscheinlich den letzten Block nicht ganz gefüllt
hatte. Um das zu beheben, brauchst du nur innerhalb der großen
Datei die Bytes der zweiten zu lesen und entsprechend weiter
vorne neu zu schreiben (blockweise).
Also, ich glaub', ich würde eine zweite Platte organisieren...
debugfs -- du brauchst nur die Blockliste aus der Inode der
zweiten Datei in die Inode der ersten zu kopieren. Dann noch
die zweite Inode freigeben (auch in der Bitmap) -- fertig

Falls die große Datei zusätzliche indirekte Blöcke für die Blockliste
braucht, mußt du die entsprechend reservieren. Und dann mußt
du dich noch um alle die Zeiger, Listen, Bitmaps, Prüfsummen
usw. kümmern, die ich jetzt vergessen hab

In dieser einen großen Datei ist jetzt allerdings in der Mitte ein
"Loch" (besser gesagt ein paar zusätzliche Bytes), weil die erste
Datei höchstwahrscheinlich den letzten Block nicht ganz gefüllt
hatte. Um das zu beheben, brauchst du nur innerhalb der großen
Datei die Bytes der zweiten zu lesen und entsprechend weiter
vorne neu zu schreiben (blockweise).
Also, ich glaub', ich würde eine zweite Platte organisieren...
Beware of programmers who carry screwdrivers.
Re: dateien zusammenfühern
Hallo,
Deine Antworten auf die bisherigen Kommentare lassen mich glauben, daß Du das konkatenierte File nicht auf Platte schreiben (weil zu groß bzw. zu wenig Plattenplatz) sondern weiterverarbeiten möchtest.
Wenn dem so ist, könnte
cat file1 file2 | more
helfen.
Der erste Befehl liefert hintereinander file1 und dann file2 und schreibt die Ausgabe nach stdout. Dies wird dann an den dem Pipe-Symbol "|" folgenden Befehl übergeben.
Grüße
admappr
...möglicherweise habe ich nicht genau verstanden, was Du wirklich machen willst.bonbon2k6 hat geschrieben: gibt es einen Befehl, mit dem man 2 Dateien kompromisslos zusammenführen kann? Ich weiß, man könnte mittels cat und Ausgabeumleitung arbeiten, aber ich möchte zwei Dateien direkt verschmelzen. Jede ist relativ groß und die Platte komplett gefüllt...
mfg
Deine Antworten auf die bisherigen Kommentare lassen mich glauben, daß Du das konkatenierte File nicht auf Platte schreiben (weil zu groß bzw. zu wenig Plattenplatz) sondern weiterverarbeiten möchtest.
Wenn dem so ist, könnte
cat file1 file2 | more
helfen.
Der erste Befehl liefert hintereinander file1 und dann file2 und schreibt die Ausgabe nach stdout. Dies wird dann an den dem Pipe-Symbol "|" folgenden Befehl übergeben.
Grüße
admappr
Re: dateien zusammenfühern
naja. ich sage euch den Hintergrund (dachte ist unwichtig)
Ich möchte einen Container erstellen für ein verschlüsselungs-experiment. Dieser sollte 80 GB groß sein. Um eine derartige Datei zu erhalten habe ich Parallel zwei Dateien mit Nullen (/dev/zero) erstellen lassen. Diese sollten dann zusammen geklebt werden.
Der Grund: Ich dachte es geht schneller, zwei Dateien parallel zu erstellen und zusammen zu fügen. Weil es dauert bei mir mehr als 2 Stunden wenn ich folgendes ausführe:
Ich finde ein so belangloser prozess sollte innerhalb weniger minuten abgeschlossen sein =) Vll kennt jemand Abhilfe.
mfg
Ich möchte einen Container erstellen für ein verschlüsselungs-experiment. Dieser sollte 80 GB groß sein. Um eine derartige Datei zu erhalten habe ich Parallel zwei Dateien mit Nullen (/dev/zero) erstellen lassen. Diese sollten dann zusammen geklebt werden.
Der Grund: Ich dachte es geht schneller, zwei Dateien parallel zu erstellen und zusammen zu fügen. Weil es dauert bei mir mehr als 2 Stunden wenn ich folgendes ausführe:
Code: Alles auswählen
dd if=/dev/zero of=./datei bs=1000M count=80
mfg
Re: dateien zusammenfühern
hi,
mein Tipp: die Blocksize ist zu groß, vielleicht muss er
dabei sogar swappen.
Du könntest die "seek"-Option von dd ausprobieren:
damit wird in < 1 Sekunde eine "sparse" Datei erzeugt, aus der
man 80GB Nullen lesen kann. Nachteil: auf der Platte werden
alte Daten nicht sofort überschrieben.
2 Dateien gleichzeitig zu schreiben kann nicht schneller gehen,
weil ständig zwischen den beiden dd umgeschaltet werden muss.
Wenn's ganz blöd kommt, muss die Platte noch jedesmal neu
positionieren, dann wird's wirklich langsam. Normal dürfte man
keinen Unterschied merken. Gigabytes zu schaufeln kostet
einfach Zeit. Unter 30 Minuten wirst du kaum kommen, schafft
eine 80er Platte 44MB/s?
mein Tipp: die Blocksize ist zu groß, vielleicht muss er
dabei sogar swappen.
Du könntest die "seek"-Option von dd ausprobieren:
Code: Alles auswählen
dd if=/dev/zero of=./datei bs=4096 count=1 seek=19531249
man 80GB Nullen lesen kann. Nachteil: auf der Platte werden
alte Daten nicht sofort überschrieben.
2 Dateien gleichzeitig zu schreiben kann nicht schneller gehen,
weil ständig zwischen den beiden dd umgeschaltet werden muss.
Wenn's ganz blöd kommt, muss die Platte noch jedesmal neu
positionieren, dann wird's wirklich langsam. Normal dürfte man
keinen Unterschied merken. Gigabytes zu schaufeln kostet
einfach Zeit. Unter 30 Minuten wirst du kaum kommen, schafft
eine 80er Platte 44MB/s?
Beware of programmers who carry screwdrivers.
Re: dateien zusammenfühern
Bonbon2k6, eine Festplatte hat eine begrenzte Transferrate d.h. heute können noch nicht z.B. 20GB/s mit einer Platte erreicht werdenbonbon2k6 hat geschrieben:Ich finde ein so belangloser prozess sollte innerhalb weniger minuten abgeschlossen sein =) Vll kennt jemand Abhilfe.

Und wie cosmac schon sagt, kostet es genau so viel Zeit zwei 40GB Dateien oder eine 80GB grosse zu erstellen.
Ja schaffen sie, unter optimalen Bedingungen.cosmac hat geschrieben:Unter 30 Minuten wirst du kaum kommen, schafft
eine 80er Platte 44MB/s?
Gruß cirrussc
--------------------
„Der Mensch steigert zur Zeit die Nutzung dessen, was seiner Willkür unterliegt - und kommt sich sehr klug dabei vor.“ H. Gruhl
--------------------
„Der Mensch steigert zur Zeit die Nutzung dessen, was seiner Willkür unterliegt - und kommt sich sehr klug dabei vor.“ H. Gruhl
Re: dateien zusammenfühern
hi,
die Seek-Option teste ich mal aus. Ich habe es jetz einfach mittels cat /dev/zero >> datei gemacht bis halt alles voll war.
Ne mein Hintergedanke war der: Man definiert am Plattenanfang eine Datei dieser Größe, ohne sie wirklich zu erstellen - wisst ihr? Aber dazu habe ich zu wenig Ahnung von den Dateisystemen. Weil an sich werden ja die nullen zu einem anderen Zweck überschrieben - mit verschlüsselten daten. Warum also erst so viele Nullen - mit so viel Zeitaufwand - schreiben.
Ext3 z.B. löscht auch nur irgendwelche Pointer und hat neuen Platz, auch wenn physisch noch alles da ist. So wollte ich es auf der Platte machen...könnte vll schwer werden, da ich ext2 verwende.
Mfg
die Seek-Option teste ich mal aus. Ich habe es jetz einfach mittels cat /dev/zero >> datei gemacht bis halt alles voll war.
Ne mein Hintergedanke war der: Man definiert am Plattenanfang eine Datei dieser Größe, ohne sie wirklich zu erstellen - wisst ihr? Aber dazu habe ich zu wenig Ahnung von den Dateisystemen. Weil an sich werden ja die nullen zu einem anderen Zweck überschrieben - mit verschlüsselten daten. Warum also erst so viele Nullen - mit so viel Zeitaufwand - schreiben.
Ext3 z.B. löscht auch nur irgendwelche Pointer und hat neuen Platz, auch wenn physisch noch alles da ist. So wollte ich es auf der Platte machen...könnte vll schwer werden, da ich ext2 verwende.
Mfg
- KBDCALLS
- Moderator
- Beiträge: 22456
- Registriert: 24.12.2003 21:26:55
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
Re: dateien zusammenfühern
Anlegen einer Sparse Datei mit dd
eine Kontrolldatei mit 1G
Und die Kontrolle
Code: Alles auswählen
dd if=/dev/zero of=datei obs=1 count=0 seek=1G
Code: Alles auswählen
dd if=/dev/zero of=datei2 bs=1024 count=1048576
Code: Alles auswählen
root@biljana:/home# ls -l datei datei2
-rw-r--r-- 1 root root 1073741824 20. Apr 12:50 datei
-rw-r--r-- 1 root root 1073741824 20. Apr 12:56 datei2
root@biljana:/home# ls -l datei datei2 -h
-rw-r--r-- 1 root root 1,0G 20. Apr 12:50 datei
-rw-r--r-- 1 root root 1,0G 20. Apr 12:56 datei2
root@biljana:/home#
Code: Alles auswählen
root@biljana:/home# stat datei ;stat datei2
File: „datei“
Size: 1073741824 Blocks: 0 IO Block: 4096 reguläre Datei
Device: 803h/2051d Inode: 147700 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2008-04-20 12:52:30.000000000 +0200
Modify: 2008-04-20 12:50:31.000000000 +0200
Change: 2008-04-20 12:50:31.000000000 +0200
File: „datei2“
Size: 1073741824 Blocks: 2099208 IO Block: 4096 reguläre Datei
Device: 803h/2051d Inode: 147701 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2008-04-20 12:56:19.000000000 +0200
Modify: 2008-04-20 12:56:53.000000000 +0200
Change: 2008-04-20 12:56:53.000000000 +0200
root@biljana:/home#
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
- Kennst du unsere Verhaltensregeln
- Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.
Re: dateien zusammenfühern
kuhl. das hab ich eigentlich gesucht 
Müsste ja eigentlich mittels dieser Sparse-Datei gehen.
Ich dank dir!
mfg

Müsste ja eigentlich mittels dieser Sparse-Datei gehen.
Ich dank dir!
mfg
Re: dateien zusammenfühern
Hi,
beim Surfen bin ich gerade über folgendes gestolpert:
beim Surfen bin ich gerade über folgendes gestolpert:
Das muesste man auch auf dein Problem anpassen koennen, denke ich.Mit sponge Änderungen an Dateiinhalt ohne temporäre Dateien vornehmen
Wenn man normalerweise Änderungen am Inhalt einer Datei vornehmen möchte benötigt man eine temporäre Datei, da man nicht gleichzeitig aus einer Datei lesen und in sie zurückschreiben kann. Das ist oft sehr unbequem, vor allem weil das sichere Erzeugen einer temporären Datei nicht völlig trivial ist.
Ein Lösung für dieses Problem ist sponge:
cat foo.txt | sed s/t/T/ | sponge foo.txt
Das funktioniert aber nur wenn sponge in eine Datei schreibt, leitet man die Ausgabe von sponge weiter funktioniert es nicht. In Debian ist sponge zur Zeit im Paket moreutils enthalten.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"