Перемещение большого количества файлов (~ 100 000)

Я работаю с папками, которые содержат много файлов, например, 100 000 или даже 1 000 000 файлов в папке. Когда я пытаюсь переместить содержимое одной папки в другую, мой компьютер всегда зависает. Даже когда процесс кажется завершенным, я не вижу содержимого какой-либо папки, потому что nautilus кажется полностью замороженным, и мне приходится заставлять мой компьютер перезагружаться. Я заметил, что это происходит также, когда я пытаюсь переместить как 10 000 файлов.

Это проблема моего компьютера или это нормально при работе с этими числами?

Любой умный способ выполнить эту передачу файла?

4 ответа

Решение

Возможно, стоит подумать об использовании метода чистой командной строки для передачи файлов очень большого объема, вы, несомненно, обнаружите, что этот процесс значительно быстрее, чем при использовании графического интерфейса.

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

find . -maxdepth 1 -type f -print0 | xargs -0 mv -t <destination>

Некоторое объяснение этой команды:

  1. Ваш входной каталог - "." символ и для этой конкретной команды вы должны быть в этом каталоге
  2. Ваш выходной каталог <destination> в моем примере. Очевидно, измените это в соответствии с вашими потребностями и не включайте скобки.
  3. Этот синтаксис учитывает имена файлов с пробелами в качестве бонуса:)

Возможны бесконечные перестановки, но это должно работать хорошо и намного эффективнее, чем графический интерфейс. Например, одна перестановка: если вы хотите переместить только PDF-файлы, вы можете запустить:

find . -iname "*.pdf" -maxdepth 1 -type f -print0 | xargs -0 mv -t <destination>

Использование xargs открывает много возможностей, особенно с перемещением такого большого количества файлов. Много, много возможностей....

Потенциальные проблемы:

Есть как минимум 2 потенциальных подводных камня для размышления, спасибо комментаторам ниже за эти мысли:

  1. Ваш целевой каталог может быть поврежден, в последующем недоступном месте, опечатан и т. Д. mv все равно переместим файлы туда! Будь осторожен...
  2. Если -t вариант (--target-directory) отсутствует, и папка назначения на самом деле является файлом, вы переместите один файл, а остальные потерпят неудачу. mv имеет 2 использования: переименовать источник в место назначения или переместить источник в каталог. Опять будь осторожен...

У меня был подобный опыт раньше, это нормально при работе с большим количеством файлов. У меня была большая коллекция PDF-данных (электронные компоненты).

Инструменты GUI проверяют некоторые данные файла и метаданные (Icon/Thumbnail, Size, ...), в этом случае это будет иметь большое значение. Даже в режиме просмотра иконок и без миниатюр они будут зависать, поскольку большинство из них не предназначены для такого экстремального случая. Инструмент с графическим интерфейсом пользователя пытается загрузить значки презентаций для всех файлов / папок в каталоге, даже если эти элементы не видны пользователю в текущей части экрана. Сортировка также является частью проблемы, и ее невозможно избежать.

  • В итоге я разбил файлы на отдельные папки по марке / модели менее 10000 каждая. Может быть, вы можете использовать дату (как большинство людей делают с фотографиями / сканы) или первые буквы (как в хранилище пакетов Ubuntu)
  • Вместо этого проще использовать инструменты CLI, поскольку они показывают только то, что вы запросили. Ты можешь использовать locate для быстрого поиска вместо find,
  • Для операции перемещения используйте mv в терминале (инструменты с графическим интерфейсом работают медленно, потому что они пытаются периодически обновлять представление).

    Если он находится в том же разделе, команда изменит только указатели в индексе файловой системы. Если нет, то это будет двойная операция (копирование и удаление). Это будет дорого.

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

  • Создайте один пакет или несколько пакетов, например, zip без / с низким сжатием. Когда вы копируете его, он будет работать быстрее, поэтому позвольте DMA выполнить свою работу.

Если вы ищете решение, которое дает вам преимущества операций командной строки с сочетанием графического интерфейса и гибкости, я рекомендую mc ( полуночный командир).

mc commander 2-х панельный вид

Это визуальный файловый менеджер на основе ncurses - у вас есть двухпанельный просмотр ваших файлов и доступно меню. Использование мыши возможно даже поверх ssh. Вы можете просматривать свои файлы, просматривать файлы с помощью средства просмотра файлов, фильтровать по критериям на лету и выполнять операции копирования или перемещения в командной строке.

Это клон DOS-программы Norton Commander, популярной в середине восьмидесятых годов. Это работает хорошо, когда GUI начинает становиться ненадежным для меня, и идеально подходит для ваших целей.

Я столкнулся с похожими проблемами - я тестировал настройки RAID и при выполнении огромных передач (например, 100 000+ файлов и 1-2 ТБ данных за один раз) кажется, что передачи начинаются довольно быстро - скажем, ~200 МБ / с, затем быстро замедлиться до приемлемого плато ~90-120 МБ / с (возможно, после использования некоторого объема флэш-памяти на дисках). Затем, через 20-30 минут, операция постепенно начинает падать до гораздо более низкого плато ~30-40 МБ / с, что еще хуже при работе с небольшими файлами - выполнение операции 4-5 часов ближе к 15 часам.

Я провел некоторое время, пытаясь диагностировать, например, возможные неисправности диска. Несмотря на то, что я пробовал разные инструменты - командную строку, nautilus, я не мог поддерживать приличную пропускную способность для очень больших операций копирования.

Для меня лучше всего было использовать полночь командира, и всякий раз, когда копирование происходило медленно, я приостанавливал операцию до тех пор, пока не погас свет индикатора жесткого диска после того, как какие-либо ожидающие операции исчезли - обычно около минуты, - затем снова ставил паузу MC и это стреляло бы назад в приличный темп в течение еще 20-30 минут. Скорее раздражает, хотя.

Другие вопросы по тегам