Je viens de découvrir une erreur déroutante:
rm: cannot remove `xxx/app/cache/prod': Directory not empty
qui a été provoquée par la commande suivante:
rm -rf $cache_dir/*
où $cache_dir
est défini commexxx/app/cache
Je le vois donc comme: rm
tout supprimé dans cache/prod
dir, puis juste avant de tenter de supprimer le cache/prod
répertoire - un autre programme a créé un fichier / répertoire à l'intérieur, ce qui a provoqué un rm
échec.
Mon hypothèse est-elle correcte?
rm -rf
sécurité des threads: si vous l'exécutez plusieurs fois simultanément sur le même répertoire, le répertoire est supprimé. Il s'agit de rm -r
ne pas être atomique.
rm
invocation, nous pouvons parler de thread-safety. Mais de toute façon, cela ne change rien
rm -r
n'est pas atomique. Si vous voulez être sûr qu'aucun autre fichier n'est créé dans le répertoire pendant qu'ilrm -rf
est en cours d'exécution, vous pouvez le renommer en premier, puis supprimer le répertoire renommé.