递归 chmod/chown/chgrp 目录中的所有文件和文件夹
Posted
技术标签:
【中文标题】递归 chmod/chown/chgrp 目录中的所有文件和文件夹【英文标题】:Recursively chmod/chown/chgrp all files and folder within a directory 【发布时间】:2011-11-07 20:39:54 【问题描述】:我正在开发一个构建其他站点的站点。有些时候我使用copy() 创建文件和目录,其他时候我在php 中构建XML 文件并使用DOMDocument::save 来保存它们。最终结果是一个具有各种混乱权限的根文件夹。我一直在修改文件和文件夹,这在某种程度上是什么意思,但在使用copy()
时我特别有麻烦。
(这是我目前所在的位置http://pastebin.com/SBE8vtFX,联系人:function modPath($path)
)
我想采用不同的方法并递归chmod/chown/chgrp文档根目录中的所有文件和文件夹一次。
以文档根目录为例
/home/mysite/public_html
在public_html
我有
-rwxrwxrwx 1 mysite mysite 348 Aug 31 10:49 index.php
d--------x 5 root root 4096 Aug 30 10:21 folder1
drwxrwxrwx 2 mysite mysite 4096 Aug 30 09:41 folder2
我的问题:
如何一次修改指定目录中的所有文件?我也想区分目录和文件夹之间的不同 chmod 设置。这需要一个 PHP 解决方案。
这是我能做到的
<?php
function modAll($root)
$aPath = explode("/", $root);
$user = $aPath[2];
/* Some sort of looping through $root */
$mod = (is_dir($thisfileorfolder) ? 0755 : 0644);
chmod($thisfileorfolder, $mod);
chown($thisfileorfolder, $user);
chgrp($thisfileorfolder, $user);
?>
【问题讨论】:
如果 PHP 调用了 bash 命令(exec
,system
),是否认为是 PHP 解决方案?
我正在使用 cron 作业来调用 PHP 文件(以 root 用户身份),所以如果可以的话,那就确定。
chown、chmod 和 chgrp 都支持递归,也许这甚至不需要 PHP,使用find
更好?
只有超级用户可以更改文件的所有者。
【参考方案1】:
您可以拨打system 电话
system("/bin/chmod -R $mod $root");
system("/bin/chown -R $user $root");
system("/bin/chgrp -R $user $root");
当然你使用 escapeshellarg() 或 escapeshellcmd() 为了避免执行任意命令
【讨论】:
1) 如何为文件和文件夹指定不同的权限,2)/bin/chmod: invalid mode:
493' 试试/bin/chmod --help' for more information.
我猜你不能回到绘图板【参考方案2】:
这应该会有所帮助。 已编辑:纠正了一些语法错误
function fsmodify($obj)
$chunks = explode('/', $obj);
chmod($obj, is_dir($obj) ? 0755 : 0644);
chown($obj, $chunks[2]);
chgrp($obj, $chunks[2]);
function fsmodifyr($dir)
if($objs = glob($dir."/*"))
foreach($objs as $obj)
fsmodify($obj);
if(is_dir($obj)) fsmodifyr($obj);
return fsmodify($dir);
【讨论】:
所以fsmodifyr('/path/to/dir/');
?
它有效吗?我使用该实现进行递归删除,我确信它有效
这值得流口水......谢谢【参考方案3】:
system("/bin/chmod -R $mod $root");
system("/usr/bin/find -type d $root -print0 | xargs -0 | /bin/chmod $moddir");
system("/bin/chown -R $user $root");
system("/bin/chgrp -R $user $root");
无效模式 493 表示您将模式作为十进制传递。先转换成八进制字符串。
【讨论】:
以上是关于递归 chmod/chown/chgrp 目录中的所有文件和文件夹的主要内容,如果未能解决你的问题,请参考以下文章
Linux中文件的可读,可写,可执行权限的解读以及chmod,chown,chgrp命令的用法
Linux中文件的可读,可写,可执行权限的解读以及chmod,chown,chgrp命令的用法