$ du -b 1GB.bin
1048576000 1GB.bin
$ split --verbose -b 120M 1GB.bin && du -b *xa*
125829120 xaa
125829120 xab
125829120 xac
125829120 xad
125829120 xae
125829120 xaf
125829120 xag
125829120 xah
41943040 xai
我如何拆分或划分上面的
1048576000 bytes
,甚至更大:2GiB = 2147483648 bytes
或3GiB = 3221225472 bytes
等等,但不必使用拆分实用程序,这样结果就和上面完全一样(每个部分是 120 MiB = 125829120 bytes
,除了最后一部分,40 MiB = 41943040 bytes
) ?.
分割文件的简单且符合 POSIX 标准的方法是使用
split
.
不清楚您为什么不想使用它。
另一种分割文件的标准方法是使用
dd
及其 skip=
参数,但这要繁琐得多。
最难的部分是生成文件名。
这可以使用 bash brace expansion 或任何 POSIX shell 中的嵌套 for
循环来完成:
mysplit_bash()(
bash -c '
if=$1
bs=${2:-12589120}
n=0
for of in x{a..z}{a..z}; do
dd if="$if" of=$of bs=$bs count=1 skip=$((n++)) 2>&-
[ -s $of ] || break
done
rm $of
' -- "$@"
)
mysplit_sh()(
if=$1
bs=${2:-12589120}
n=0
set - a b c d e f g h i j k l m n o p q r s t u v w x y z
for i; do
for j; do
of=x$i$j
dd if="$if" of=$of bs=$bs count=1 skip=$n 2>&-
[ -s $of ] || break 2
n=$(expr $n + 1)
done
done
rm $of
)
添加您自己的错误检查。
使用要拆分的文件名调用作为第一个参数,可选地使用 chunksize(以
dd
理解的形式)作为第二个参数。
如果输入文件需要拆分成超过 675 个部分,这些函数将产生不正确的输出。