используя coreutils разбить файл на части в разных каталогах?

681
719016

Как я могу использовать splitкоманду coreutils GNU, чтобы разбить большой файл на куски по L строк, каждая, но помещая каждый из разных подфайлов в разные каталоги одновременно с их созданием?

Сейчас у меня есть скрипт на языке Perl, который создает иерархию каталогов, начиная с ./00/00/00к ./99/99/99и делать перл отпечатки каждой строки в субфайлы в сценарии, но это гораздо медленнее, чем раскол команда проекта GNU будет делать, создавая все подфайлы в одном каталоге. Я хотел бы, чтобы они были в иерархии каталогов, поскольку в дальнейшем это станет для меня более управляемым.

Есть идеи?

1
Will you satisfy if something just sorts files into subfolders after `split` will split your file? rush 11 лет назад 0
It would be great if it could be done *while* split is working. 719016 11 лет назад 0

1 ответ на вопрос

0
Ярослав Рахматуллин

Программа не поддерживает это (согласно информации и страницам руководства). Лучше всего переместить файлы после того, как они созданы. Ваша следующая лучшая ставка - добавить эту функцию и отправить патч текущему сопровождающему.

Первый вариант действительно не так сложен и не должен быть очень медленным, если вы не подключены к сети. Рассмотрите возможность использования поддельного раздела reiserfs для этого:

dd if = / dev / zero of = folder.reserfs bs = 1M seek = 5000 count = 0 losttup / dev / loop7 folder.reserfs cfdisk / dev / loop7 # (сделать 1 основной раздел) mkreiserfs / dev / loop7 папки mkdir папки sudo / dev / loop7 / -o loop папки cd  $ time echo / / | tr '' '\ n' | XARGS -L 10000 MKDIR -P время: реальный 1m28.2s пользователь 0m9.9s система 1m12.0s 

переместите файлы следующим образом (возможно, разумнее переместить как можно больше файлов одновременно, а не 1 на 1 - используйте символы подстановки и xargs -L):

for i in x*; do echo mv $i $/$ ;done