Нещодавно мені потрібно було видалити велику кількість файлів (понад 1 мільйон), і я прочитав це:
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
Це був один з найбільш оптимізованих способів зробити це, і я можу поручити, що це швидше, ніж rm -rf
.
Я не фахівець з цього питання, але, з мого розуміння, причина виконання rsync має щось робити так, як вона перераховує файли (я думаю, LIFO замість FIFO). Тепер проблема полягає в тому, що мені також потрібно ефективно перемістити велику кількість файлів. Трохи пошукавши, я виявив таке:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination
Хоча це видаляє всі переміщені файли в ~/source
, каталоги залишаються там. Оскільки у мене є структура каталогів «круглобітка», кількість files/directories
дуже близька до 1, тому я змушений запустити першу команду ще раз, щоб повністю позбутися каталогу:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination && \
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
Прямий mv
закінчується практично миттєво, але в моєму ~/destination
каталозі є файли, які слід зберігати, тому mv
це не варіант. Я знайшов параметри --prune-empty-dirs
і --force
rsync, але, здається, не працює так, як я очікував:
--force force deletion of directories even if not empty
--prune-empty-dirs prune empty directory chains from the file-list
--remove-source-files sender removes synchronized files (non-dirs)
Чи є спосіб імітувати рух за допомогою rsync за один раз?