如何将一组字节拆分成单独的部分

问题描述 投票:0回答:1
$ 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
) ?.

linux shell split byte
1个回答
0
投票

分割文件的简单且符合 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 个部分,这些函数将产生不正确的输出。

© www.soinside.com 2019 - 2024. All rights reserved.