É mv com curinga ainda atômica

6

Meu entendimento é que mv dir1 / file1 dir2 / é atômico,

O mv dir1 / * dir2 / também é atômico?

Como exemplo, suponha que haja 10 arquivos em dir1 com 10 GB cada.

    
por MR2Power 17.03.2015 / 20:22

3 respostas

20

Vamos começar com a afirmação de que mv nem sempre é atômico.

Para qualquer arquivo individual, a movimentação ou renomeação realizada por mv é atômica desde que o arquivo seja movido dentro do mesmo sistema de arquivos. A atomicidade não garante que o arquivo esteja apenas em um lugar ou outro; É bem possível que o arquivo possa estar presente no sistema de arquivos em ambos os lugares simultaneamente por "um curto período de tempo".

mv definitivamente não é atômico quando a movimentação que realiza é de um sistema de arquivos para outro, ou quando um sistema de arquivos remoto não pode implementar a operação mv localmente. Nesses casos, mv é implementado pelo equivalente a cp seguido por rm .

Agora, vamos para a questão da atomicidade em vários arquivos. mv é, na melhor das hipóteses, apenas atômico por arquivo, portanto, se você tiver vários arquivos para mover juntos, a implementação será de tal forma que eles serão movidos um de cada vez.

Se você realmente precisar de um grupo de arquivos para aparecer em um destino simultaneamente, considere colocá-los em um diretório e mover esse diretório. Este único objeto (o diretório) pode ser movido atomicamente.

    
por 17.03.2015 / 21:00
6

Não. mv dir1/* é o mesmo que mv dir1/file1 && mv dir1/file2 && mv dir1/fileN . Cada jogada individual é atômica, mas não o conjunto completo.

    
por 17.03.2015 / 20:25
1

Outro caso, um novo arquivo é adicionado ao dir1 após o início do mv.

Como o “*” é expandido pelo shell, o mv nem vai saber sobre o novo arquivo.

    
por 18.03.2015 / 12:03

Tags