Eu não estou familiarizado com o Python. Estou usando comandos Unix padrão para ilustrar meus pensamentos. Traduza para o Python sozinho.
Dentro de um único sistema de arquivos que é sensato o suficiente, mv
deve ser atômico . Se você optar por mover arquivos em duas etapas, ou seja, cp
+ rm
, será necessário certificar-se de que cp
foi bem-sucedido antes de você rm
. Com atomic mv
não há risco de acabar com o arquivo totalmente desvinculado ou "metade aqui, metade lá".
Mudar de um sistema de arquivos para outro com mv
é como cp
+ rm
; mv
espera que a tarefa de cópia seja bem-sucedida antes de desvincular o arquivo original, ainda assim algumas coisas podem dar errado.
Como AFH comentou:
To copy a file you need to be able to read it, but to move it you need write access to the source and target directories, without any necessity to read the file being moved.
Verdadeiro. Há, no entanto, uma maneira de "copiar" um arquivo dentro de um único sistema de arquivos sem lê-lo: crie um link físico. Certifique-se de entender a diferença .
Se você ainda insistir em fazer isso em duas etapas, em vez de cp
+ rm
try ln
+ rm
primeiro. Claro que você precisa garantir ln
trabalhado antes de você rm
. Uma tentativa de criar um link entre dispositivos falhará. Nesse caso, você deve voltar para cp
+ rm
(e acho que não há como fazê-lo sem ler o arquivo).