Переміщення великої кількості файлів (~ 100 000)


13

Я працюю з папками, які містять багато файлів, наприклад 100 000 або навіть 1 000 000 файлів у папці. Коли я намагаюся перемістити вміст папки в іншу, мій комп'ютер завжди застрягає. Навіть коли процес здається закінченим, я не бачу вмісту жодної папки, тому що nautilus здається повністю замороженим, і я змушую комп'ютер перезапустити. Я помітив, що це трапляється і тоді, коли я намагаюся перемістити, як 10 000 файлів.

Це проблема мого комп'ютера чи це нормально при роботі з цими номерами?

Якийсь розумний спосіб здійснити передачу цього файлу?


3
Що з використанням терміналу ( cp -R SRC/ DEST/)
UniversallyUniqueID

2
@BharadwajRaju: Залежно від файлів cp -a може бути кращим, оскільки він зберігає власників, часові позначки та дозволи. Я також рекомендую rsync, оскільки він може перевіряти передачі та копіювати лише ті файли, які ще не існують.
Майкл

Оновлення: gvfs-copygvfs-binпакета) може бути швидшим, ніж cp.
UniversallyUniqueID

У вас тут два питання замість одного. Будь ласка, перегляньте сторінку " Як запитувати ", щоб отримати інструкції.
Luís de Sousa

Відповіді:


19

Можливо, подумайте, використовуючи чистий метод командного рядка для передачі файлів дуже великої кількості, ви, безсумнівно, знайдете процес значно швидше, ніж використання gui.

Існує багато різних способів досягти цього, але наступне працювало швидко, безпечно та ефективно в моїй системі:

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відкриває багато можливостей, особливо при переміщенні такої великої кількості файлів. Багато, багато можливостей….

Потенційні проблеми:

Існує щонайменше дві можливі підводні камені, завдяки комунаторам, наведеним нижче, за ці думки:

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

2
Не просто find . -maxdepth 1 -type f -exec mv -t test {} +так?
муру

@muru: Дякую за це, я підрізав сторонній -name...шматок, але залишив xargsна місці.
andrew.46

2
Я не знаю ... Хоча команда, очевидно, правильна, як є, я вважаю повний хід трохи надто схильним до помилок. (Що робити, якщо, наприклад, ви забудете включити -tпрапор? Я думаю, що всі файли будуть "переміщені" в один єдиний файл, який називається test, в результаті чого всі ваші файли, крім одного, будуть втрачені.) Я думаю, що я вважаю за краще rsync, якщо все пішло правильно, a rm. Однак я можу уявити сценарії, коли таку перевірку неможливо автоматизувати.
Жос

@Jos: Дякую, я додав примітку про колонтитул, що описує цю можливість. Приємно бачити rsync приклад, написаний як відповідь?
andrew.46

Linux підтримує надзвичайно довгі списки аргументів, тому ви, ймовірно, можете це робити mv dir1/* dir2, і вдаватися лише до цього, find -execякщо є проблема або якщо вам потрібно уникати відповідності папок зі своїм глобусом. (Хоча залежно від вашого умовного іменування, часто *.*буде відповідати більшість файлів, але не більшість каталогів, оскільки звичайно мати .extensionфайли у файлах, а звичайно не мати .назв каталогів)
Пітер Кордес,

4

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

Інструменти графічного інтерфейсу перевіряють наявність деяких деталей файлів та метаданих (значок / мініатюра, розмір, ...), у цьому випадку буде великою справою. Навіть у Icon View і без ескізів вони замерзнуть, оскільки більшість з них не розроблені для таких екстремальних випадків. Інструмент графічного інтерфейсу спробуйте завантажити піктограми презентації для всіх файлів / папок у каталозі, навіть ті елементи не видно користувачеві в поточній частині екрана. Сортування також є частиною проблеми, і немає способу її уникнути.

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

    Якщо він знаходиться в одному розділі, команда змінить лише покажчики в індексі файлової системи. Якщо ні, то це буде подвійна операція (копіювання та видалення). Це буде дорого.

Я можу допомогти лише в одному випадку, якщо ви копіюєте ці файли кілька разів, і вони не оновлюються. Як я це робив, коли ділився колекцією з друзями, кожен раз, коли я намагаюся копіювати, це займає десятиліття. (Це корисніше лише для файлів невеликого розміру)

  • Створіть один пакет або декілька пакетів, наприклад zip без / низького стиснення. Коли ви скопіюєте його, він пройде швидше, тому нехай DMA виконує свою роботу.

3

Якщо ви шукаєте рішення, яке дає переваги операцій командного рядка, поєднуючи почуття та гнучкість GUI, я рекомендую mc( командир опівночі ).

2-панельний вид командира mc

Це візуальний менеджер файлів на основі ncurses - у вас є перегляд двох панелей ваших файлів і доступне меню. Використання миші можливо навіть над ssh. Ви можете переглядати файли, переглядати файли за допомогою засобу перегляду файлів, фільтрувати згідно критеріїв на ходу та виконувати операції копіювання чи переміщення в командному рядку.

Це клон командира програми DOS Нортона, який був популярний у середині вісімдесятих. Він добре працює, коли GUI починає ставати ненадійним для мене, і ідеально підходить для ваших цілей.


0

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

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

Що найкраще працювало для мене - використовувати командувач опівночі, і кожного разу, коли копіювання буде повільним, я призупиняю операцію, поки індикатор жорсткого диска не згасне після того, як будь-які очікувані операції спалахнуть - як правило, хвилину або близько того - після цього знову відмовте паузу MC і він би відстрілювався до пристойного темпу ще протягом 20-30 хвилин. Хоча це дратує.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.