Я не знаком с Python. Я использую стандартные команды Unix, чтобы проиллюстрировать свои мысли. Перевести на Python по своему усмотрению.
В пределах одной файловой системы, которая является достаточно разумной, mv
должна быть атомарной . Если вы решите переместить файлы в два этапа, то есть cp
+ rm
, то вам нужно убедиться, что все cp
прошло успешно rm
. С Atomic mv
нет никакого риска, что вы в конечном итоге получите файл полностью несвязанным или «наполовину здесь, наполовину там».
Переход от одной файловой системы в другую с mv
подобен cp
+ rm
; mv
ждет, пока задача копирования завершится успешно, прежде чем она отсоединит исходный файл, но мало что может пойти не так.
Как прокомментировал AFH:
Чтобы скопировать файл, вы должны быть в состоянии прочитать его, но чтобы переместить его, вам нужен доступ на запись к исходному и целевому каталогам, без необходимости чтения перемещаемого файла.
Правда. Однако существует способ «скопировать» файл в пределах одной файловой системы, не читая его: создать жесткую ссылку. Убедитесь, что вы понимаете разницу .
Если вы все еще настаиваете на том, чтобы сделать это в два этапа, вместо cp
+ rm
попробуйте ln
+ rm
сначала. Конечно, вы должны убедиться, что ln
работали до вас rm
. Попытка создать ссылку между устройствами потерпит неудачу. В этом случае вам следует вернуться к cp
+ rm
(и я думаю, что нет способа сделать это без чтения файла).