Reihenfolge von vielen Bytes umdrehen?

10/11/2014 - 12:22 von Ole Jansen | Report spam
Moin,

Eine größere Datei soll in einem Shellscript komplett "umgedreht"
werden, d.h. das letzte byte wird zum Ersten, das Vorletzte zum
Zweiten usw.

Ich kenne zwar rev und tac, ab einer gewissen Größe/bei reinen
Binàrdateien funktioniert das anscheinend nicht.

Kennt da noch jemand "hübsche" Lösung, die mit Bordmitteln auskommt?

Alternativ: Gibt er einen Weg solche Dateien als loop sozusagen
"verkehrtherum" zu mounten oder Ahnliches?

(OS ist ein Ubuntu 12.04 LTS 64bit)

Danke,

O.J.
 

Lesen sie die antworten

#1 Ansgar Strickerschmidt
10/11/2014 - 17:50 | Warnen spam
Am 10.11.2014, 12:22 Uhr, schrieb Ole Jansen
:

Moin,

Eine größere Datei soll in einem Shellscript komplett "umgedreht"
werden, d.h. das letzte byte wird zum Ersten, das Vorletzte zum
Zweiten usw.



Wie groß?

Quasi "zu Fuß" geht's so (ich spare mir das Drumherum mit
Parameterübergabe, welches File etc. ...):


#!/bin/bash

# Dreht original.file um und speichert es in reverse.file :

# reverse.file erst mal kommentarlos löschen:
rm reverse.file >/dev/null 2>&1

# real genutzte Größe ermitteln:
size="$(du -bs original.file)"
size=${size%%\t*}

# echo -n "start ..."

for ((i=$size; i>=0; i--)); do
dd if=original.file bs=1 conv=notrunc status=noxfer skip=$i count=1
of=reverse.file oflag=append >/dev/null 2>&1
done

# echo " done."



Vorteil: Funktioniert zuverlàssig wie ein alter Lanz Bulldog.
Nachteil: Funktioniert genauso flink wie ein alter Lanz Bulldog. Will
heißen: Das kannst Du bei Dateien >100kB kaum abwarten...
:)

Andere Methoden scheint's zumindest seitens bash nicht zu geben. Ob etwa
Perl oder Python das besser könnte, kann ich mangels entsprechender
Kenntnisse nicht sagen.

Ans-"Mister 'dd'"-gar

*** Musik! ***

Ähnliche fragen