
我正在嘗試遞歸地更改項目中所有文件和目錄的權限。
我找到了一個在 magento 論壇上發帖說我可以使用這些命令:
find ./ -type f | xargs chmod 644
find ./ -type d | xargs chmod 755
chmod -Rf 777 var
chmod -Rf 777 media
它工作了find ./ -type d | xargs chmod 755
.
該命令find ./ -type f
返回了很多文件,但chmod: access to 'fileXY.html' not possible: file or directory not found
如果我執行find ./ -type f | xargs chmod 644
.
我該如何解決這個問題?
PS:我知道他建議對我的var和media資料夾使用777權限,這是一個安全風險,但是我們還應該使用什麼呢?
答案1
我猜您遇到的文件名稱中包含導致xargs
它們分開的字符,例如空白。要解決這個問題,假設您使用的是find
且支援適當選項的版本xargs
(源自 GNU 變體,並且不是由 POSIX 指定),您應該使用以下命令:
find . -type f -print0 | xargs -0 chmod 644
find . -type d -print0 | xargs -0 chmod 755
或者更好的是,
chmod -R a-x,a=rX,u+w .
其優點是流程較短、僅使用一個流程、且支持POSIXchmod
(看這個答案了解詳情)。
您的問題media
相當var
廣泛,如果您對特定答案感興趣,我建議您將其作為一個單獨的問題提出,並提供有關您對目錄的使用的更多資訊。
答案2
怎麼樣:
find ./ -type d -exec chmod 755 {} +
這是規範的便攜式解決方案,甚至可以處理檔案名稱中的換行符。