私は紛らわしいエラーをキャッチしました:
rm: cannot remove `xxx/app/cache/prod': Directory not empty
これは次のコマンドによって引き起こされました:
rm -rf $cache_dir/*
どこ$cache_dirのように定義されますxxx/app/cache
だから私はそれを次のように見ていrmます:cache/proddirのすべてを削除してから、それがcache/prodディレクトリを削除しようとする直前-別のプログラムがその中にファイル/ディレクトリを作成したため、rm失敗の原因となりました。
私の仮定は正しいですか?
@ジョニー:うん、それは実際に私が実際に実装したものです:-)
—
zerkms
それでも完全に安全ではありません。アプリが現在そのディレクトリの外で動作している場合、移動に伴って正常に動作し続けます。
—
Patrick
これは
—
Gilles「SO-邪悪なことをやめなさい」
rm -rfスレッドセーフであることとは関係ありません。同じディレクトリで同時に複数回実行すると、ディレクトリは削除されます。これはrm -rアトミックでないことについてです。
@Gilles:それは依存します:「コードの一部は、同時に複数のスレッドによる安全な実行を保証する方法で共有データ構造を操作するだけの場合、スレッドセーフです」。したがって、「スレッド」を
—
zerkms 2013年
rm呼び出しとして想定する場合、スレッドセーフについて説明することがあります。しかしとにかく、それは何も変更しません
rm -rアトミックではありません。のrm -rf実行中にディレクトリにファイルが作成されないようにするには、まずファイルの名前を変更してから、名前を変更したディレクトリを削除します。