「rm -rf a/b」が「a/bが空ではない」と言うのはなぜですか?

「rm -rf a/b」が「a/bが空ではない」と言うのはなぜですか?

次のスクリプト時々私に同じことを与えるcan't remove a/b as it's not empty

ssh -T user@host <<EOF
  cd somewhere
  rm -rf a/b    
EOF

ただし、サーバーにログインして実行したrm -rf a/b後、問題は発生しませんでした。

ファイルを生成する他のプロセスがありますa/b。これは関係ありますか?

とにかく、「a / b」が削除されたことを確認するスクリプトをどのように作成できますか?

ベストアンサー1

a / bにファイルを生成する他のプロセスはありますか?関係ありますか?

おそらく。おそらく、rm -rfすべてのファイルを最初に削除してから、すべてのディレクトリを削除します。その後、rmdirディレクトリが空でない場合、ディレクトリを削除するためのシステムコールは失敗します。rm -rfディレクトリが空であることを確認する競合状態がある可能性があり、その後他のプロセスが最終的にrm -rf呼び出されますが、rmdir他のプロセスはファイルを事前に生成します。

Faheemの提案は良いです。lsエラー条件を入力してください。

ssh -T user@host <<EOF
  cd somewhere
  rm -rf a/b || ( ls -a a/b && exit 1 )
EOF

おすすめ記事