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