xargs + chmod - 找不到檔案或目錄

xargs + chmod - 找不到檔案或目錄

我正在嘗試遞歸地更改項目中所有文件和目錄的權限。

我找到了一個在 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 {} +

這是規範的便攜式解決方案,甚至可以處理檔案名稱中的換行符。

相關內容