
Какие rsync
команды эквивалентны командам / mv
a/b/ /c/d/, т. е. для перемещения дерева каталогов из одного места в другое, возможно, в другой файловой системе?
То есть не просто копировать, а удалять файлы из исходного расположения. Причина, по которой я хочу использовать, rsync
заключается в том, что я хочу иметь возможность возобновить частичное перемещение и иметь возможность ограничить использование полосы пропускания.
решение1
Эта команда синхронизирует все файлы из /a/b в /c/d, сохранит разрешения, даты изменения, символические ссылки и выполнит рекурсию в каталоги (все это делает '-a' или '--archive', это то же самое, что использовать '-rlptgoD', которые являются отдельными параметрами для всего этого), -v — для подробного вывода, а '--remove-source-files' удалит исходные файлы после того, как они будут полностью созданы в месте назначения.
Если каталог d внутри /c/ не существует, он будет создан.
rsync -av --remove-source-files /a/b /c/d
Если вы хотите переместить данные на удаленный сервер, то будет выполнена синхронизация с путем удаленного сервера, а параметр «-z» сожмет данные файла во время передачи.
rsync -avz --remove-source-files /a/b user@hostname_or_ip:/c/d
Каталоги не будут удалены с помощью '--remove-source-files', поэтому вам нужно запустить rm -rf /a/b после rsync, чтобы удалить все каталоги внутри /a/b/
В одной строке команды вы можете все это поместить следующим образом
rsync -av --remove-source-files /a/b /c/d; if find /a/b/ -type f | read; then echo "Not all files were synced"; else rm -rf /a/b; fi
Это запустит rsync, затем проверит, остались ли какие-либо файлы, чтобы предотвратить удаление папки, если некоторые файлы не были полностью синхронизированы и, следовательно, не были удалены, а затем либо выведет сообщение о том, что не все файлы были синхронизированы, либо удалит папку, если в ней нет файлов.