Bulk operations for Drupal sites.
- amoffat/sh
- popstas/server-scripts (
drupal-get-drupalsandcp-chown,drupal-patchin examples) - popstas/drupal-scripts (
drsin examples) - uses
drupal-get-drupalscommand, you can change variableget_drupals_commandin script - search match-tests in
/usr/share/drall/match-tests/, you can change variabletests_root_pathin script, see/match-tests-examples
- поиск всех папок друпала
- фильтрация папок
- переход в корневую папку друпала
- выполнение заданной команды от имени юзера сайта или root
git clone https://github.com/popstas/drall.git
cd drall
./install.sh
Install with antigen:
antigen bundle viasite/drs
Common usage: drall [options] ["command or command_file_path"]
Options:
-h, --help show this help message and exit
-r, --asroot Exec as root
-q, --quiet don't print status messages to stdout
-v, --verbose Verbose
-n NUMBER Only NUMBER first sites. 0 = all sites
--name=ROOT_PATH_MASK
only matches by root_path
-m MATCH_TESTS, --match-test=MATCH_TESTS
only matches if command output not empty string
commands from/usr/local/bin/match-tests/ allowed
multiple tests You can use negative matchers, add "-"
before command
--test Test exec, only first site
--theme=THEME Only for sites with theme
Команда будет запущена в каждой папке отфильтрованного сайта.
Можно указать путь к скрипту, а можно написать bash строку, она будет выполнена.
Чтобы не экранировать строку команды, можно писать ее в одинарных кавычках.
drall "echo \$(pwd)" - правильно
drall 'echo $(pwd)' - правильно
drall "echo $(pwd)" - неправильно, в каждой папке выдаст путь папки, из которой был запущен drall
-q Не выводить путь к папке сайта перед выполнением команды
-v Подробный вывод работы скрипта
-r, --asroot Выполнить команду под root (иначе выполнится от имени владельца папки)
-n Применить только к первым n сайтам
-m --match-test Фильтровать сайты командой
--theme Применять только к сайтам с определенной темой
-m - главная команда для фильтрации. Работает так:
В /usr/local/bin/match-tests ищется одноименный файл и выполняется в корне сайта.
Если результат не пустой и не равен нулю, сайт проходит фильтр.
Можно указывать несколько тестов так:
drall -m test1 -m test2
Можно использовать отрицательные тесты, нужно добавить "-" перед командой.
Например, вывести сайты с "грязным" css:
drall -m visitkaplus -m -clean_css
--theme - принимает имя темы, проверяет, лежит ли в sites/all/themes такая папка. После появления match-test не особо полезен.
-n - ограничивает выходной список указанным количеством
--name - ограничивает выходной список сайтами, содержащими в пути указанную подстроку. Удобно, если нужно проверить drall на конкретном одном сайте
drall - просто выведет список всех друпалов
drall -m snormal - выведет список всех snormal
drall -m visitkaplus -m clean_css - получение списка всех визиток с чистым css
drall 'drush dis dblog' - отключит dblog на всех сайтах
drall 'drush ublk user@example.com' - а также другие drush-команды
drall 'drupal-patch http://drupal.org/path/to/patch' - применение патча ко всем сайтам
drall -m visitkaplus 'drupal-patch http://example.com/style.css_menu_width.patch' - пропатчить все готовые не измененные сайты
drall -m '-drs vget update_modified' -m visitkaplus - получить все визитки+ не отключенные от апдейтов
drall -v -m all_complete -m clean_all - получить все готовые не измененные сайты
drall --asroot -m snormal -m clean_css -v 'cp-chown /home/from/www/from.example.com $PWD sites/all/themes/theme/css/style.css' - скопировать style.css из from.example.com в каждый неизмененный snormal
export page="/contacts"; drall --asroot -q 'url="http://$(get_domain)$page"; http --check-status --follow HEAD "$url" &> /dev/null && echo "$url"' 2>/dev/null | grep -v "^$" - вывести все страницы /contacts
- Команду нужно заключать в кавычки, фактически, команда должна быть одним параметром скрипта
- Если в папке тестов match-tests будет несколько одноименных тестов, команда скорее всего упадет
- Нужно различать одинарные и двойные кавычки, чаще всего команду надо заключать в одинарные кавычки. См. раздел "Команда"