linux 中是否有任何工具可以将文件拆分到位?

ngo*_*eff 17 linux command-line

我有一个 500G 的文件,我想在 linux 中拆分它,但是我没有另外 500G 的可用空间来运行split(1).

是否有工具或脚本可以在使用最少的额外空间的情况下将文件就地拆分为 1G 块?

whi*_*ark 15

#!/bin/bash
# (c) whitequark 2010

set -e

if [ $# != 2 ]; then
  echo "Usage: $0 <filename> <part size>"
  echo "  This script will split file to multiple parts, starting from"
  echo "  the end, and truncating the original file in process."
  echo "  Part size is specified in bytes."
  echo "  Use at your own risk."
  exit 0
fi

filename=$1
partsize=$2

size=$(stat -c '%s' "${filename}")
parts=$(($size / $partsize))

do_split() {
  _part=$1
  _size=$2

  echo "Splitting part $_part"
  echo $(($partsize * ($_part - 1)))
  dd if="${filename}" of="${filename}.$(printf '%04d' $_part)" \
      count=1 bs=$partsize skip=$(($_part - 1))
  echo "Truncating source file"
  truncate "${filename}" --size="-$_size"
}

lastsize=$(($size % $partsize))
if [ $lastsize != 0 ]; then
  do_split $(($parts + 1)) $lastsize
fi

for i in $(seq $parts -1 1); do
  do_split $i $partsize
done

rm "${filename}"
Run Code Online (Sandbox Code Playgroud)

gedit 在反汇编后成功运行。

  • 请注意,如果由于某种原因您没有 truncate,您可以使用 'dd if=/dev/null of="${filename}" seek=1 bs=$(($size - $_size))' (2认同)