Используя coreutils разбить файл на части в разных каталогах?
Как я могу использовать GNU coreutils split
Команда разбить большой файл на куски по L строк, каждая, но положить каждый из разных подфайлов в разные каталоги одновременно, когда они создаются?
Прямо сейчас у меня есть Perl-скрипт, который создает иерархию каталогов, начиная с ./00/00/00
в ./99/99/99
и выполнение perl-печати каждой строки в подфайлах в сценарии, но это намного медленнее, чем команда split в GNU, создавая все подфайлы в одном каталоге. Я бы хотел, чтобы они были в иерархии каталогов, поскольку в дальнейшем это станет для меня более управляемым.
Есть идеи?
1 ответ
Программа не поддерживает это (согласно информации и страницам руководства). Лучше всего переместить файлы после того, как они созданы. Ваша следующая лучшая ставка - добавить эту функцию и отправить патч текущему сопровождающему.
Первый вариант на самом деле не так сложен и не должен быть очень медленным, если вы не подключены к сети. Рассмотрите возможность использования поддельного раздела 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 {00..99}/{00..99}/{00..99} |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 ${i:1:1}/${i:2:2} ;done