Wie schneide ich eine Datei um eine bestimmte Anzahl Bytes ab?

6786
groovy354

Ich habe ~ 300 Dateien, die abgeschnitten werden müssen (ich muss eine bestimmte Anzahl von Bytes vom Anfang der Datei entfernen). Ich kann dies mit einem Hex-Datei-Editor einzeln tun, aber angesichts der Anzahl der Dateien, die ich verarbeiten muss, wäre dies eine ziemlich überwältigende Aufgabe.

Gibt es dafür eine automatisierte Lösung? (Betriebssystem ist Windows 7 64bit.)

5
Am besten verwenden Sie PowerShell. Es sollte mit dem Betriebssystem vorinstalliert sein. Ich bin jetzt nicht auf einem Windows-Computer, aber ich werde morgen mit einer Antwort zurückkommen, falls niemand eine findet. Hier ist ein Hinweis: http://www.sans.org/windows-security/2010/02/11/powershell-byte-array-hex-convert vor 11 Jahren 1

2 Antworten auf die Frage

5
Hennes

dd hat eine Überspringoption.

Pro Datei können Sie verwenden dd if=MyFile of=my_new_file skip=BytesToSkip

Optional in einer Schleife (zB in der Bash im Zielverzeichnis)
for a in * ; do echo processing $a ; dd if=$a of=$a.shorter skip=300 ; done

Überspringen mit der richtigen Anzahl von Bytes, KB oder MB anpassen.
Wenn die Dateien groß sind und die Blockgröße (bs = X) verwendet wird, kann dies die Abläufe beschleunigen.

Sag das zu Windows ... :) vor 11 Jahren 0
Es gab noch kein win7-Tag, als ich mit der Antwort begann. Wie groß sind die Dateien? Klein genug für einen schnellen Wechsel zu einem Unix-Host? Groß genug, um die Installation zusätzlicher Werkzeuge zu gewährleisten? Hennes vor 11 Jahren 0
`dd` ist [für Windows verfügbar] (http://www.chrysocome.net/dd). In `CMD` kann die Schleife folgendermaßen ausgeführt werden:` für% a in (*. *) Do dd, wenn =% a von =% a.shorter überspringen = 300 '. Ansgar Wiechers vor 11 Jahren 6
2

Here you go...

Powershell code:

$PATH = "d:\My Dir" $BYTES_TO_TRIM = 10 $files = dir $PATH | where { !$_.PsIsContainer } foreach ($file in $files) { Write-Output "File being truncated: $($file.FullName)" Write-Output " Original Size: $($file.Length) bytes" Write-Output " Truncating $BYTES_TO_TRIM bytes..." $byteEncodedContent = [System.IO.File]::ReadAllBytes($file.FullName) $truncatedByteEncodedContent = $byteEncodedContent[$BYTES_TO_TRIM..($byteEncodedContent.Length - 1)] Set-Content -value $truncatedByteEncodedContent -encoding byte -path "$($file.FullName)" Write-Output " Size after truncation: $((Get-Item $file.FullName).Length) bytes" Write-Output "Truncation done!`n" } 
Dieses Skript gibt den folgenden Fehler aus: "Es wurde eine Ausnahme vom Typ 'System.OutOfMemoryException' ausgelöst." dtmland vor 10 Jahren 0
@dtmland Ich habe beim Schreiben nicht an 100 GB-Dateien gedacht. Wenn Sie möchten, können Sie eine Lösung für Byte-für-Byte-Lesung erhalten. vor 10 Jahren 0