David Haller <[EMAIL PROTECTED]> writes: >> dd if=$1 of=- bs=584 seek=$SEEK count=1 |\ > > Da fehlt die Umrechung in die Bloecke (s.u.)... Du rufst so dd fuer > jedes byte auf...
Was meinst Du mit "Umrechung in die BlÃcke"? Dieser Befehl fÃhrt eine einzige Leseoperation aus, in der er 584 Bytes liest. Fehlerhaft ist allerdings, daà "seek" nicht im Input, sondern im Output BlÃcke Ãberspringt. Gemeint war wohl "skip". > BLKSZ=584 > [...] > dd if="$1" bs="$BLKSZ" seek="$seek" count=1 | \ Abgesehen vom fehlenden "of=-", Unterschieden im Quoting und unter- schiedlichen Variablennamen unterscheidet sich das nicht von der Zeile, die Du kritisiert hattest. > Diese Loesung hat allerdings den Nachteil, dass bei grossen Dateien > die Ausfuehrungszeit exponentiell steigt, weil fuer jedes Fragment a > $BLKSZ Bytes die Datei neu geoeffnet werden muss, an die richtige > Stelle ge"seek"t werden muss, und dann jeweils nur ein Block von > $BLKSZ Bytes gelesen und ausgegeben wird... Bei kleinen Dateien (sagen > wir, bis 100 * $BLKSZ) geht das noch, aber darueber wird's schnell > eklig. Die Zeit, um an eine bestimmte Stelle in einer Datei zu "seeken", ist ungefÃhr konstant, unabhÃngig davon, wo in der Datei die Stelle liegt. Darum ist die AusfÃhrungszeit des Skriptes _linear_ von der DateigrÃÃe abhÃngig. Davon, daà dd tatsÃchlich den Systemcall "lseek" verwendet, kann man sich im Quellcode (coreutils 5.2.1) in Datei src/dd.c, Zeile 818 Ãberzeugen. Martin