如何使用Linux命令split
将一个zip文件拆分为多个较小的zip文件?
我有一个大的zip档案,其中包含一个包含数百万行的文件,我需要处理这些行。幸运的是,处理可以并行完成,所以我想将zip分成N个部分,以提供给在几台机器上运行的处理器。
我目前正在使用这个命令将一个巨大的zip档案拆分为10个较小的zip档案:
gunzip -c original.zip | split -l 10 - 'smaller-part-' --additional-suffix='.txt' --filter='gzip >> $FILE.zip'
在我运行Ubuntu16的本地主机上,它运行得很好。然而,在另一台运行Ubuntu16的服务器上,这个命令神秘地失败了,并出现了错误:
split: with FILE=smaller-part-aa.txt, exit 1 from command: gzip >> $FILE.zip
为什么它会以错误代码退出?即使我指定了--verbose
,它也没有提供进一步的解释。
编辑:问题似乎与运行命令的用户有关。在抛出错误的服务器上,我在像sudo -u buildbot bash
一样启动的shell中以自定义buildbot
用户的身份运行它。但是,所有文件和目录都归该用户所有。当我以默认ubuntu用户的身份运行该命令时,它会正确运行。为什么在作为自定义用户运行时会出现gunzip/split/gzip错误?
问题是我的用户为其SHELL
环境变量设置了/bin/false
,这导致split的--filter
参数失败,因为它需要一个有效的shell来执行filter命令。使用vipw
将其更改为/bin/bash
修复了它。