Я работаю с папками, которые содержат много файлов, например, 100 000 или даже 1 000 000 файлов в папке. Когда я пытаюсь переместить содержимое одной папки в другую, мой компьютер всегда зависает. Даже когда процесс кажется завершенным, я не вижу содержимого какой-либо папки, потому что nautilus кажется полностью замороженным, и мне приходится заставлять мой компьютер перезагружаться. Я заметил, что это происходит также, когда я пытаюсь переместить как 10 000 файлов.
Это проблема моего компьютера или это нормально при работе с этими числами?
Любой умный способ выполнить эту передачу файла?
cp -R SRC/ DEST/
)gvfs-copy
(изgvfs-bin
пакета) может быть быстрее, чемcp
.Ответы:
Возможно, стоит подумать об использовании метода чистой командной строки для передачи файлов очень большого количества, вы, несомненно, обнаружите, что этот процесс значительно быстрее, чем при использовании графического интерфейса.
Есть много разных способов сделать это, но следующие сработали быстро, безопасно и эффективно в моей системе:
Некоторое объяснение этой команды:
<destination>
в моем примере. Очевидно, измените это в соответствии со своими потребностями и не включайте скобки.Возможны бесконечные перестановки, но это должно работать хорошо и намного эффективнее, чем графический интерфейс. Например, одна перестановка: если вы хотите переместить только PDF-файлы, вы можете запустить:
Использование
xargs
открывает много возможностей, особенно при перемещении такого большого количества файлов. Много, много возможностей ....Потенциальные проблемы:
Есть как минимум 2 потенциальных подводных камня для размышления, спасибо комментаторам ниже за эти мысли:
mv
равно файлы будут перемещены туда! Будь осторожен ...-t
опция (--target-directory
) отсутствует и целевая папка фактически является файлом, вы переместите один файл, а остальные потерпят неудачу.mv
имеет 2 использования: переименовать источник в место назначения или переместить источник в каталог . Опять будь осторожен ...источник
find . -maxdepth 1 -type f -exec mv -t test {} +
сделал бы просто ?-name...
частей, но я оставилxargs
на месте.-t
флаг? Я думаю, что все файлы будут «перемещены» в один файл с именемtest
, что приведет к потере всех ваших файлов, кроме одного.) Я думаю, что я предпочел быrsync
после, если все прошло правильно, аrm
. Однако я могу представить сценарии, в которых такая проверка не может быть автоматизирована.rsync
пример, написанный как ответ?mv dir1/* dir2
и прибегнуть к ним только вfind -exec
случае возникновения проблемы или если вам нужно избегать сопоставления папок с вашим глобом. (Хотя, в зависимости от ваших соглашений об именах, часто*.*
совпадает с большинством файлов, но не с большинством каталогов, так как обычно в.extension
файлах есть.
имена, а в именах каталогов - нет)У меня был подобный опыт раньше, это нормально при работе с большим количеством файлов. У меня была большая коллекция PDF-данных (электронные компоненты).
Инструменты GUI проверяют некоторые детали файла и метаданные (Icon / Thumbnail, Size, ...), в этом случае это будет иметь большое значение. Даже в режиме просмотра иконок и без миниатюр они будут зависать, поскольку большинство из них не предназначены для такого экстремального случая. Инструмент с графическим интерфейсом попытается загрузить значки презентаций для всех файлов / папок в каталоге, даже если эти элементы не видны пользователю в текущей части экрана. Сортировка также является частью проблемы, и ее невозможно избежать.
locate
для быстрого поиска вместоfind
.Для операции перемещения используйте
mv
в терминале (инструменты GUI работают медленно, потому что они пытаются периодически обновлять представление).Если он находится в том же разделе, команда изменит только указатели в индексе файловой системы. Если нет, то это будет двойная операция (копирование и удаление). Это будет дорого.
Я могу помочь только в одном случае, если вы копируете эти файлы несколько раз, а они не обновляются. Как я делала, когда делюсь своей коллекцией с друзьями, каждый раз, когда я пытаюсь копировать, это занимает десятилетие. (Это более полезно только для файлов небольшого размера)
источник
Если вы ищете решение, которое дает вам преимущества операций командной строки с сочетанием графического интерфейса и гибкости, я рекомендую
mc
( Midnight Commander ).Это визуальный файловый менеджер на основе 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 минут. Скорее раздражает, хотя.
источник