O cp e o tar criam arquivos temporários e fazem um mv atômico?

0

Estou usando o Files.walkFileTree do Java para examinar periodicamente um diretório específico para arquivos * .csv e depois lê-los.

Eu sei que o mv é atômico (pelo menos dentro do mesmo dispositivo), então 'mv' um arquivo não deve ser um problema em termos de condição de corrida.

Se eu fizer um cp em vez disso, o cp primeiro faz uma cópia para um nome de arquivo diferente, e então faz um atomic mv com o nome original? Ou vai causar uma condição de corrida, fazendo uma leitura direta e escrita?

Eu tenho a mesma pergunta para extrair arquivos para outro diretório usando tar & gz.

PS. Caso a resposta seja dependente do sistema operacional, estou trabalhando no CentOS 6. Além disso, se possível, a resposta também pode ser mencionada para o Windows?

    
por Abhinav Vishak 25.07.2017 / 18:20

1 resposta

2

Para o GNU cp e o GNU tar (as implementações padrão na maioria das distribuições do Linux, incluindo o CentOS), ambos criam o arquivo no local. Eu tenho certeza que o mesmo acontece com a maioria das outras implementações também. Não é muito difícil escrever um script wrapper para torná-lo funcionalmente atômico. Não tenho certeza sobre o Windows, mas não penso que forneça mais garantias de que o POSIX faz para a atomicidade da operação do sistema de arquivos.

Também vale a pena notar também que mv é apenas atômico se não ultrapassar um limite do sistema de arquivos, caso contrário, ele se torna equivalente a executar cp e, em seguida, desvincular o arquivo de origem.

    
por 25.07.2017 / 19:48