Я должен переместить некоторые файлы из одной файловой системы в другую под Ubuntu. Тем не менее, очень важно, чтобы файлы никогда не существовали как целевые или неполные файлы в месте назначения, по крайней мере, не под правильным именем файла.
Пока что мое единственное решение - написать сценарий, который принимает каждый файл, копирует его во временное имя в месте назначения, затем переименовывает его (который, я считаю, должен быть атомарным) в месте назначения в исходное имя файла и, наконец, удаляет исходный файл. ,
Однако написание и отладка скрипта кажется слишком сложным для этой задачи. Есть ли способ или инструмент, который уже делает это изначально?
Ответы:
rsync
копирует во временные имена файлов (например, смотрите расширение временного файла Rsync и rsync - создает ли он временный файл во время передачи? ), если вы не используете--inplace
опцию Он переименовывает их только после успешной передачи файла.rsync
также удаляет все файлы назначения, которые были переданы только частично (например, из-за переполнения диска или другой ошибки).Существует также
--remove-source-files
опция, которая удаляет исходные файлы после их успешной передачи. Смотритеrsync
man-страницу для более подробной информации.Собрав все это вместе, вы можете использовать что-то вроде:
Этот параметр особенно полезен для задач, таких как перемещение файлов из «входящей» очереди или аналогично каталогу, в котором они будут обрабатываться.
В качестве альтернативы, если это разовое зеркало, возможно, просто используйте
rsync
без--remove-source-files
опции. Вы можете удалить исходные файлы позже, если хотите / должны.источник
rsync
можно сделать, и я знал, что он переносил файлы с временным именем (если вы не используете--inplace
), поэтому я посмотрел вman rsync
и нашел--remove-source-files
.rsync
Это хороший инструмент для проверки практически любой задачи передачи файлов.