Страница 1 из 1

Быстрое перемещение миллиона файлов из несольких папок в одну

Добавлено: 2019-11-18 13:10:03
brainiac
Всем привет!
Парни нужна помощь.
Надо из нескольих тысяч директорий слить порядка миллиона файлов в одну.
Сейчас это работает очень долго (скоро будет 12 часов как) таким скриптом:

Код: Выделить всё

#!/bin/sh
for file in `find ./pages-1574024491/FIL_PAGE_INDEX/ -type f -name "*.page"`; do mv "$file" ./pages-1574024491/end/; done
Есть варианты ускорить/оптимизировать процесс?

п.с.
файло находится на одном большом твердотельнике, но тем не менее долго все это...
объём примерно 25гигов

Быстрое перемещение миллиона файлов из несольких папок в одну

Добавлено: 2019-11-19 12:59:20
skeletor
Если упора в диски нет, тогда использовать xargs.

Быстрое перемещение миллиона файлов из несольких папок в одну

Добавлено: 2019-11-19 14:38:03
brainiac
Я всегда думал, что на твердотельниках, даже в пределах одного диска,
файлы должно значительно быстрее копироваться/перемещаться, нежели наблюдаю.
Нет пока времени разбираться, что не так.

Кстати вот такая конструкция тоже работает:

Код: Выделить всё

find . -type f -exec mv "{}" ../end \;
Кстати, с xargs, почему-то ошибки вываливались, видать не до конца разобрался.

Быстрое перемещение миллиона файлов из несольких папок в одну

Добавлено: 2019-11-25 11:50:50
lazhu
Переместили? Сколько времени заняло? Оптимизация тут может быть только одна - вызвать команду mv один раз вместо миллиона.

Код: Выделить всё

find ./pages-1574024491/FIL_PAGE_INDEX/ -type f -name "*.page" > dump
tr '\n' ' ' < dump > move.sh
chmod 755 move.sh
Добавьте 'mv ' в начало строки, путь назначения в конец и запустите скрипт.

Быстрое перемещение миллиона файлов из несольких папок в одну

Добавлено: 2019-11-25 11:59:31
skeletor
lazhu, То, что вы сделали строку длинной в 100500 файлов может не сработать, ибо в mv/cp/... есть общее ограничение на количество параметров, поэтому может не сработать при слишком большом количестве.

Быстрое перемещение миллиона файлов из несольких папок в одну

Добавлено: 2019-11-25 12:09:11
lazhu
skeletor, да, вполне возможно. С тысячью работает без проблем. Ну, разбить на модули можно, будет все равно быстрее в 2^n раз

Быстрое перемещение миллиона файлов из несольких папок в одну

Добавлено: 2019-11-25 12:12:49
skeletor
Тут вариантов 2: либо разобраться с xargs и запустить и не парится, либо разбивать на модули, писать циклы для обработки модулей и т.д. ))

Быстрое перемещение миллиона файлов из несольких папок в одну

Добавлено: 2019-11-25 12:34:00
brainiac
lazhu писал(а):
2019-11-25 11:50:50
Переместили? Сколько времени заняло? Оптимизация тут может быть только одна - вызвать команду mv один раз вместо миллиона.
Да переместил, способами которые указал сверху, у меня заняло около 17 часов :\

Быстрое перемещение миллиона файлов из несольких папок в одну

Добавлено: 2019-11-25 12:38:19
brainiac
skeletor писал(а):
2019-11-25 11:59:31
есть общее ограничение на количество параметров, поэтому может не сработать при слишком большом количестве.
Да, если втупую врубить mv то сваливается с ошибкой типа 'Argument list too long'

Быстрое перемещение миллиона файлов из несольких папок в одну

Добавлено: 2019-12-03 8:14:42
Alex Keda
я на php скрипт писал
180k файлов - за 10 минут.
при этом оно ещё проверяло что файл есть, и обновляло таблицу в БД...

но - там было известно местоположение файлов.

не, не так. там местопололожение высчитывалось по его имени, причём в обоих случаяз - и откуда и куда.
т.е. искать все не надо было, чисто перекладка