web-dev-qa-db-ja.com

設定されたバイト数でファイルをバッチ切り捨てするにはどうすればよいですか?

切り捨てる必要のあるファイルが最大300個あります(ファイルの先頭から指定されたバイト数を削除する必要があります)。 16進ファイルエディタを使用して1つずつ実行できますが、処理する必要のあるファイルの数を考えると、かなり大変な作業になります。

これに対する自動化されたソリューションはありますか? (オペレーティングシステムはWindows 7 64ビットです。)

5
groovy354

ddにはスキップオプションがあります。

ファイルごとにdd if=MyFile of=my_new_file skip=BytesToSkipを使用できます

オプションでループ内(ターゲットディレクトリのbashなど)
for a in * ; do echo processing $a ; dd if=$a of=$a.shorter skip=300 ; done

正しいバイト数、KBまたはMBでスキップを調整します
ファイルが大きい場合、ブロックサイズ(bs = X)で再生すると、処理速度が上がる可能性があります。

5
Hennes

どうぞ...

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"
}
2
user127350