2017-01-18 13 views
0

Как вы используете команду Linux split для разбиения zip-файла на несколько небольших ZIP-файлов?Сплит с ошибкой

У меня есть большой архив zip, содержащий один файл, содержащий миллионы строк, которые мне нужно обработать. К счастью, обработка может быть выполнена параллельно, поэтому я хочу разбить zip на N частей, чтобы предоставить процессорам, работающим на нескольких машинах.

настоящее время я использую эту команду, чтобы разделить один массивный архив почтового индекса в 10 небольших почтовых архивов:

gunzip -c original.zip | split -l 10 - 'smaller-part-' --additional-suffix='.txt' --filter='gzip >> $FILE.zip' 

На моем локальном хосте под управлением Ubuntu 16, это работает отлично. Однако на другом сервере под управлением Ubuntu 16, эта команда таинственно завершается с ошибкой:

split: with FILE=smaller-part-aa.txt, exit 1 from command: gzip >> $FILE.zip 

Почему выход с кодом ошибки? Даже если я укажу --verbose, он не дает никаких дополнительных пояснений.

Редактировать: Проблема, похоже, связана с пользователем, выполняющим команду. На сервере, бросающем ошибку, я запускаю ее как пользовательский пользователь buildbot в оболочке, запущенной как sudo -u buildbot bash. Однако все файлы и каталоги принадлежат этому пользователю. Когда я запускаю команду как пользователь ubuntu по умолчанию, она работает правильно. Зачем нужна ошибка gunzip/split/gzip при запуске как пользовательский пользователь?

ответ

0

Проблемы была мой пользователь имел /bin/false набор для своей переменной SHELL среды, что приводит к --filter паров Сплита на провал, так как она требует действительной оболочки для выполнения команды фильтра. Используя vipw, чтобы изменить это на /bin/bash, он исправил это.