1

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

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

Есть идеи?

1 ответ1

0

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

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

dd if=/dev/zero of=folders.reserfs bs=1M seek=5000 count=0
losetup  /dev/loop7  folders.reserfs
cfdisk /dev/loop7 # (make 1 primary partition)
mkreiserfs /dev/loop7
mkdir folders
sudo mount /dev/loop7  folders/  -o loop
cd folders

$ time echo  {00..99}/{00..99}/{00..99} |tr ' ' '\n' | xargs -L 10000 mkdir -p
time: Real 1m28.2s  User 0m9.9s  System 1m12.0s

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

for i in x*; do echo mv $i ${i:1:1}/${i:2:2} ;done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .