Обновление нескольких каталогов с изменением разрешений пользователей

У меня есть несколько пользователей на одной машине с FreeBSD7.3. У каждого пользователя есть свой сайт (только один). Каждый сайт является копией мастер-сайта с небольшими отличиями (например, конфигурация базы данных, файлы шаблонов).
Это как много Wordpress с разными пользователями на одной машине.

Проблема в:
Я сделал патч для мастер-сайта. Как я могу обновить все эти сайты одновременно, справедливо меняя права пользователей и владельца.

IE: у меня есть патч, как это:

/ Темп / патч / 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
Другие вопросы по тегам