O 'rm -rf' não é atômico?

11

Acabei de receber um erro confuso:

rm: cannot remove 'xxx/app/cache/prod': Directory not empty

que foi causado pelo seguinte comando:

rm -rf $cache_dir/*

em que $cache_dir é definido como xxx/app/cache

Então, vejo como: rm removeu tudo em cache/prod dir, logo antes de tentar remover o diretório cache/prod - outro programa criou um diretório file / a dentro dele, portanto, causou rm failure .

Minha suposição é correta?

    
por zerkms 22.10.2013 / 01:23

1 resposta

7

A mensagem de erro dada foi "Diretório não vazio" ( ENOTEMPTY ), dado que sua suposição parece correta, que é uma condição de corrida em que um programa criou um arquivo nesse diretório antes de rm tentar remover o diretório , fornecendo o erro esperado ENOTEMPTY do rmdir(2) subjacente.

NOTA: Para estar no lado seguro, você pode mover / renomear o diretório para um novo nome e, em seguida, executar a exclusão deste diretório.

    
por 22.10.2013 / 01:39

Tags