Como lote truncar um arquivo por uma quantidade definida de bytes?

5

Eu tenho ~ 300 arquivos que precisam ser truncados (eu preciso remover um número especificado de bytes do começo do arquivo). Eu posso fazer isso um por um usando um editor de arquivos hexadecimais, mas dado o número de arquivos que eu tenho que processar isso seria uma tarefa bastante opressiva.

Existe uma solução automatizada para isso? (Sistema operacional é o Windows 7 64bit.)

    
por groovy354 08.10.2012 / 23:08

2 respostas

5

dd tem uma opção para pular.

Por arquivo Você pode usar dd if=MyFile of=my_new_file skip=BytesToSkip

Opcionalmente em um loop (por exemplo, em bash no diretório de destino),% for a in * ; do echo processing $a ; dd if=$a of=$a.shorter skip=300 ; done

Ajustar ignorar com o número correto de bytes, KB ou MB
Se os arquivos são grandes jogando com o tamanho do bloco (bs = X) pode acelerar as coisas.

    
por 08.10.2012 / 23:26
2

Aqui você vai ...

Código do Powershell:

$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"
}
    
por 09.10.2012 / 14:47