Я использую rsync для получения необходимых файлов с сервера, а затем удаляю файлы с сервера, как только они у меня появляются локально. Полная команда, которую я запускаю, приведена ниже.
Это успешно удаляет файлы на исходном сервере, однако пустые каталоги все еще остаются. Я не получаю никаких сообщений или ошибок. Весь вывод в норме. Возможно, это предполагаемая функциональность.
Как я могу сказать rsync очистить все, включая каталоги?
rsync --progress -vrzh --remove-source-files
Версия 3.0.9 на обоих концах.
Ответы:
Поведение того,
--remove-source-files
что вы наблюдаете, точно соответствуетman rsync
:Нет конкретной команды для удаления каталогов, как ясно показывают эти два обсуждения в StackExchange и ServerFault . Предлагаемое решение состоит в том, чтобы выпустить две отдельные команды:
Последний фрагмент команды, предложенный в этих двух постах,
который необходим для удаления (теперь опустошенного) исходного каталога, имеет такую форму в этих сообщениях, потому что OP и ответы используют rsync для перемещения большого количества файлов на одном компьютере. В вашем случае вам придется сделать это вручную.
источник
rsync --delete
опасное предложение, поскольку оно игнорирует вероятность того, что rsync не был завершен или в источнике есть новые файлы. Метод @ slhckfind
ниже намного безопаснее.В справочной странице даже сказано:
Если вы хотите удалить пустые каталоги в вашем источнике, если еще остались файлы, выполните:
Но для пустого корневого каталога,
rm -rf <directory>
конечно , будет достаточно.источник
find some_dir -depth -type d -empty -not -path some_dir -delete
Использование « rm -rf » имеет неотъемлемое условие гонки, а именно вы можете удалить файлы, которые были только что созданы между вызовами rsync и rm .
Я предпочитаю использовать:
Это НЕ удалит каталоги, если они не пусты.
источник
rm -rf
будут удалены файлы, которые не были перенесены по какой-либо причине.-depth
опцию, которая дает командуfind
обрабатывать в правильном порядке. В результате этой ошибки каталоги, которые содержат только пустые каталоги (возможно, рекурсивно), не будут удалены. Вариант от @slhck имеет это право.-m, --prune-empty-dirs
удалить пустые цепочки каталогов из списка файлов--force
принудительно удалить каталоги, даже если они не пустыисточник
Удалите исходные файлы, затем удалите каталоги, чтобы быть в безопасности.
источник