我在一台装有 FreeBSD7.3 的机器上有多个用户。每个用户都有自己的站点(只有一个)。每个站点都是主站点的副本,略有不同(即数据库配置、模板文件)。
这就像一台机器上有多个 Wordpress,但用户不同。
问题是:
我为主站点制作了一个补丁。我如何才能一次性更新所有这些站点,正确地更改用户权限和所有权。
IE:我有类似的补丁:
/temp/patch/www/--index.php
--includes
/system.php
我有许多用户具有相同的目录结构和一些其他文件:
/home/mike/www/mikebestsite.com/
--index.php
--index2.php
--includes/system.php/home/john/www/superjohnsite.com/
--index.php
--includes/system.php
--includes/break.php/home/larry/www/larry-e-king.com/
--index.php
--includes/system.php
--css/larry.css
答案1
这是一个快速的 bash 代码片段,应该可以帮到您。
我假设其中的所有内容/home
都是目录,并且匹配的*\.com
是您想要替换index.php
和的站点includes/system.php
。如果此逻辑不合适,您可能需要自己进行一些修改。
我已经在有限的限制内对其进行了测试。确保ls -ld
FreeBSD 中的输出在第三个字段中有用户,在第四个字段中有组。此外,--reply=yes
是 GNUism。您可能必须使用-f
或 BSD 等效项来强制替换现有文件而无需交互。
for D in `find /home -type d -name '*\.com'`
do
myuser=`ls -ld $D | awk '{print $3}'`
mygroup=`ls -ld $D | awk '{print $4}'`
echo "Updating ${D}..."
cp ${D}/index.php ${D}/index.php.ORIG
cp ${D}/includes/system.php ${D}/includes/system.php.ORIG
cp --reply=yes /path/to/temp/patch/www/index.php ${D}
cp --reply=yes /path/to/temp/patch/www/includes/system.php ${D}/includes
chown $myuser:$mygroup ${D}/index.php
chown $myuser:$mygroup ${D}/includes/system.php
echo "--------------------------------"
echo ""
done