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_direst défini commexxx/app/cache
Je le vois donc comme: rmtout supprimé dans cache/proddir, puis juste avant de tenter de supprimer le cache/prodré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 -rfsé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 -rne pas être atomique.
rminvocation, nous pouvons parler de thread-safety. Mais de toute façon, cela ne change rien
rm -rn'est pas atomique. Si vous voulez être sûr qu'aucun autre fichier n'est créé dans le répertoire pendant qu'ilrm -rfest en cours d'exécution, vous pouvez le renommer en premier, puis supprimer le répertoire renommé.