split: option '--numeric-suffixes' doesn't allow an argument的解决方法

执行split -a 3 -b `expr 100 \* 1024` --numeric-suffixes=100  "uImage" "./u.ext3-"会报错split: option '--numeric-suffixes' doesn't allow an argument。

根本原因是当前使用的split版本较低

Ubuntu12.04中的版本为8.13

root@ubuntu:/# split --version
split (GNU coreutils) 8.13
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


Written by Torbjörn Granlund and Richard M. Stallman.

---------------------------------------------

root@ubuntu:/aaron/toradex/nvida/split-test# split --help
Usage: split [OPTION]... [INPUT [PREFIX]]
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default
size is 1000 lines, and default PREFIX is `x'.  With no INPUT, or when INPUT
is -, read standard input.


Mandatory arguments to long options are mandatory for short options too.
  -a, --suffix-length=N   use suffixes of length N (default 2)
  -b, --bytes=SIZE        put SIZE bytes per output file
  -C, --line-bytes=SIZE   put at most SIZE bytes of lines per output file
  -d, --numeric-suffixes  use numeric suffixes instead of alphabetic(此处没有指明可以接收起点的参数)
  -e, --elide-empty-files  do not generate empty output files with `-n'
      --filter=COMMAND    write to shell COMMAND; file name is $FILE
  -l, --lines=NUMBER      put NUMBER lines per output file
  -n, --number=CHUNKS     generate CHUNKS output files.  See below
  -u, --unbuffered        immediately copy input to output with `-n r/...'
      --verbose           print a diagnostic just before each
                            output file is opened
      --help     display this help and exit
      --version  output version information and exit


SIZE may be (or may be an integer optionally followed by) one of following:
KB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.

Ubuntu14.04中的版本为8.21

root@ubuntu:/aaron/split-test# split --version
split (GNU coreutils) 8.21
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


Written by Torbjörn Granlund and Richard M. Stallman.root@ubuntu:/aaron/split-test# split --help
Usage: split [OPTION]... [INPUT [PREFIX]]
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default
size is 1000 lines, and default PREFIX is 'x'.  With no INPUT, or when INPUT
is -, read standard input.


Mandatory arguments to long options are mandatory for short options too.
  -a, --suffix-length=N   generate suffixes of length N (default 2)
      --additional-suffix=SUFFIX  append an additional SUFFIX to file names.
  -b, --bytes=SIZE        put SIZE bytes per output file
  -C, --line-bytes=SIZE   put at most SIZE bytes of lines per output file
  -d, --numeric-suffixes[=FROM]  use numeric suffixes instead of alphabetic.
                                   FROM changes the start value (default 0).(此处指明可以接收起点的参数)
  -e, --elide-empty-files  do not generate empty output files with '-n'
      --filter=COMMAND    write to shell COMMAND; file name is $FILE
  -l, --lines=NUMBER      put NUMBER lines per output file
  -n, --number=CHUNKS     generate CHUNKS output files.  See below
  -u, --unbuffered        immediately copy input to output with '-n r/...'
      --verbose           print a diagnostic just before each
                            output file is opened
      --help     display this help and exit
      --version  output version information and exit


SIZE is an integer and optional unit (example: 10M is 10*1024*1024).  Units
are K, M, G, T, P, E, Z, Y (powers of 1024) or KB, MB, ... (powers of 1000).


Ubuntu14.04可以正常执行,Ubuntu12.04会报错。

root@ubuntu:/aaron/split-test# ls
u.ext3-100  u.ext3-110  u.ext3-120  u.ext3-130  u.ext3-140  u.ext3-150
u.ext3-101  u.ext3-111  u.ext3-121  u.ext3-131  u.ext3-141  u.ext3-151
u.ext3-102  u.ext3-112  u.ext3-122  u.ext3-132  u.ext3-142  u.ext3-152
u.ext3-103  u.ext3-113  u.ext3-123  u.ext3-133  u.ext3-143  u.ext3-153
u.ext3-104  u.ext3-114  u.ext3-124  u.ext3-134  u.ext3-144  uImage
u.ext3-105  u.ext3-115  u.ext3-125  u.ext3-135  u.ext3-145  
u.ext3-106  u.ext3-116  u.ext3-126  u.ext3-136  u.ext3-146
u.ext3-107  u.ext3-117  u.ext3-127  u.ext3-137  u.ext3-147
u.ext3-108  u.ext3-118  u.ext3-128  u.ext3-138  u.ext3-148
u.ext3-109  u.ext3-119  u.ext3-129  u.ext3-139  u.ext3-149


----------------------------------------------------------------------------------

Linux命令学习手册-split命令  2012-01-06 12:38:34

分类: LINUX

split [OPTION] [INPUT [PREFIX]]

[功能]
将文件分割成多片。

[描述]
    将输入文件'INPUT'分割,输出固定大小的文件片段"PREFIXaa,PREFIXab,...",这里,默认的大小为1000行,并且PREFIX的默认值为'x',如果没有指定输入文件(INPUT文件),或者输入为-,那么会从标准输入读取。
    选项如下:
    -a, --suffix-length=N
    使用的后缀的长度,默认长度为2,例如'aa','ab'等后缀,其长度就是2。
    -b, --bytes=SIZE
    指定每个输出文件片段的大小。
    -C, --line-bytes=SIZE
    指定每个输出文件片段的最大行字节(???)。
    -d, --numeric-suffixes
    指定输出文件片段后缀为数字而不是默认的字母形式。
    -l, --lines=NUMBER
    指定每个输出文件片段的行数。

    以上,指定的大小"SIZE"可以用如下的方式指定单位:后缀为b表示512字节,后缀为k表示1K,后缀为m表示1M。

[举例]
*将文件rootfs.tgz分割成15m每份:
# split -b 15m rootfs.tgz 

这里,会将文件rootfs.tgz分割成多个片段,每个15m,最后一个根据文件大小可能小于15m。单位15m中的'm'必须小写。另外,不加m单位的话则为字节。
具体如下:
(1)分割之前:
#ls -l
-rw-r--r-- 1 quietheart quietheart 35055284 01-06 10:49 rootfs.tgz
(2)分割之后:
# du -shc *
34M     rootfs.tgz
16M     xaa
16M     xab
3.5M    xac
67M     总计
# ls -l 
总计 68572
-rw-r--r-- 1 quietheart quietheart 35055284 01-06 10:49 rootfs.tgz
-rw-r--r-- 1 root       root       15728640 01-06 10:57 xaa
-rw-r--r-- 1 root       root       15728640 01-06 10:57 xab
-rw-r--r-- 1 root       root        3598004 01-06 10:57 xac
这里,"du"命令大小有误差,使用ls -l可看到15728640实际就是15M。
(3)将文件合并:
#cat xaa xab xac >merge.tgz
这样会将分割的文件合并还原。

*将文件rootfs.tgz分割成15m每份,前缀名称为rootfs:
# split -b 15m rootfs.tgz rootfs

这样,生成的文件片段名称不是默认的'x'为前缀而是以指定的'rootfs'为前缀了。
分割之后,文件如下:
# ls
rootfsaa  rootfsab  rootfsac  rootfs.tgz

*将文件rootfs.tgz分割成15m每份,后缀名称为数字:
# split -b 15m rootfs.tgz -d

这样,分割之后,每个文件片段的后缀不是默认的字母而是数字了,前缀(默认为'x')也可以自己指定的。运行之后如下:
# ls
rootfs.tgz  x00  x01  x02
这里,x00,x01,x02就是文件片段。

[其他]
可以使用cat命令将分割的文件片段合并。
例如:
#cat xaa xab xac >merge.tgz
这样会将分割的文件片段xaa,xab,xac合并还原成merge.tgz。

你可能感兴趣的:(Linux)