2017-07-27 97 views
3

我有大型項目和一些腳本來編譯它們。我不能在這裏添加所有代碼,所以我會嘗試簡化問題:在清理部分,我需要清除名爲directory的文件夾,其中包含名爲innerDir的其他目錄。我有清潔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所有內容被真正刪除的機會)。
現在我得到這個錯誤:

find: 'directory/innerDir': Permission denied 

有兩件事情,不清楚我在這裏:
(1)。 innerDir是在cleing部分之前使用makedir -p創建的,並且稍後在代碼中沒有更改其權限。爲什麼我沒有權限刪除它? (2)。如果我再次嘗試清洗 - 清洗成功,我沒有任何許可問題。所以,如果我在第一次嘗試刪除它時遇到權限錯誤,爲什麼我不能在第二次得到它?

+1

你用sudo運行你的命令嗎? –

+0

@RamanSailopal - no。爲什麼我需要使用sudo運行? – Rodrigo

+0

我將在'clean'目標中使用'-rm -r -f directory'。即使'rm'失敗,make也會繼續。只是一個解決方法 – dlmeetei

回答

1

如果您的權限在目錄樹下有效,則rm -fr directory應該才能正常工作。

如果您對innerDir沒有讀取權限,那麼是否有可能/有可能​​(取決於正在運行的進程,可能)某些內容已寫入到innerDir中,但文件會在清除後自動清除目錄?

您可以舉出每個步驟之間發生的操作的權限,所有權和某個範圍的示例嗎?

您能否在工作時重命名父文件夾,和/或鎖定它的權限以阻止其他用戶或進程改變事物?