rsync
может перемещаться в движущиеся папки очень похоже и превосходить традиционные mv
со следующими опциями:
rsync -axvvES --remove-source-files source_directory /destination/
Однако одна вещь, которую я пока не могу сделать, это удалить оригинальные каталоги. --remove-source-files
Флаг делает только что, удаляет исходные файлы, но не также исходные каталоги. Хотелось бы, чтобы был и --remove-source-directories
флаг, но его нет.
Как я могу справиться с этим? Я полагаю, что я могу просто выпустить rm -fr
после переезда, однако я бы предпочел сохранить процедуру все в одном процессе, а не вводить потенциал для ошибок.
mv
?find . -type d -empty | xargs rmdir -p
rsync
сеанса в список, который затем обрабатывается в соответствии с процессом, который затем очищает его ... Хм.Ответы:
Я не нашел команду, которая делает это за один раз, но поскольку rsync по-прежнему работает лучше, чем
rm -rf
(особенно если у вас очень большое количество каталогов), вот две команды rsync, которые выполняют «перемещение» :источник
Использование « rm -rf » имеет неотъемлемое условие гонки, а именно вы можете удалить файлы, которые были только что созданы между вызовами rsync и rm .
Я предпочитаю использовать:
Это НЕ удалит каталоги, если они не пусты.
источник
-depth
OSX или другие.Я оказался в похожей ситуации. Я хотел избежать
rm -rf
, зная, что rsync не смог скопировать некоторые файлы, и я не хотел их терять.Чтобы просто удалить пустые каталоги, я нашел этот самый удобный (из
sourcedir
):источник
Почему бы просто не добавить
rm -rf source_directory
после вашего rsync?Каждая программа командной строки (в идеале) предназначена для выполнения определенной задачи, и вы должны склеить несколько программ для выполнения более сложных задач.
источник
find -depth
. Не могли бы вы предложить быстрый алгоритмический подход к тому, чтобы добраться до дна стека dir, используя rsync, как вы заметили, а затем снова вернуться к дереву?