Недавно мне нужно было удалить большое количество файлов (более 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 за один раз?