2017-07-27 7 views
3

大きなプロジェクトとそれらをコンパイルするスクリプトがあります。私はここにすべてのコードを追加することはできませんので、私は問題を単純化しようとします:クリーニング部ではinnerDirという名前の別のディレクトリを含むdirectoryという名前のフォルダをクリーニングする必要があります。私はdirectoryを洗浄するため、このbashコマンドを持っている:rm -r -fは内部フォルダを削除しません

clean: 
    rm -r -f directory 

ディレクトリが、私は事前にmkdir -pで作成したフォルダがあります。私はきれいにするとき、私はこのエラーを取得する:

rm: cannot remove 'directory': Directory not empty 

しかし、私はdirectoryを入力しようとすると、私はそれが空だということを参照してください。

rm -r -f directory/* 
find directory 
rmdir directory      

(同じことを行うと仮定だが、ここで私もdirectoryのすべてのコンテンツが実際に削除されたかどうかを確認する機会を得る):だから、デバッグのために、私はあることを私のcleanningの一部を変更しました。
は今、私はこのエラーを取得する:

find: 'directory/innerDir': Permission denied 

私にとって不明確二つがここにあります
(1)。 innerDirは、後でコード内のパーミッションを変更することなく、開封部分の前にmakedir -pで作成されました。なぜ私はそれを削除する許可を持っていないのですか?
(2)。私が再び清掃しようとすると、清掃は成功し、私は許可の問題はありません。だから、最初に許可エラーが出たら、削除しようとしましたが、なぜ2回目にそれを取得できませんか?

+1

あなたはsudoでコマンドを実行していますか? –

+0

@RamanSailopal - no。なぜ私はsudoで実行する必要がありますか? – Rodrigo

+0

ターゲット 'clean'に' -rm -r -f directory'を使用します。 'rm'が失敗しても、makeは続行します。ただの回避策 – dlmeetei

答えて

1

アクセス許可がディレクトリツリーの下で有効な場合は、rm -fr directoryは、となります。

innerDirの読み取りアクセス権がない場合は、何かがinnerDirに書き込まれた可能性があります(実行中のプロセスによってはおそらく)が、ディレクトリが空きになった後にファイルがクリーンアップされるのでしょうか?

許可、所有権、および各手順の間に行われる操作の範囲の例を挙げることができますか?

作業中に親フォルダの名前を変更したり、他のユーザーやプロセスが物事を変更しないように権限をロックできますか?

関連する問題