2017-02-16 4 views
0

У меня есть большой набор однострочных сайтов WordPress на моем Linux-сервере. Я хочу создать текстовые файлы, содержащие имена каталогов для групп моих сайтов.Выполнение команды в нескольких каталогах

Например все мои сайты живут в /var/www/vhosts, и я, возможно, захотите сгруппировать набор 100 сайтов в текстовом файле, например

site1 
site2 
site3 
site4 

Как я могу написать скрипт, который будет указанный цикл только через каталоги, в текстовых файлах группы и выполнить команду. Моя цель - символизировать некоторые из плагинов WordPress, и я не хочу, чтобы вручную катавать каталог по каталогу, если я могу просто создавать группы и выполнять команду в этой группе каталогов.

Для каждого сайта в файле группы перейдите в папку /wp-content/plugins и выполните указанную команду symlink.

+0

Можете ли вы предоставить примеры ввода и вывода? – MosheZada

ответ

0

В зависимости от ваших целей, вы можете достичь этого с помощью однострочной линии с использованием find и действия -exec. Мне нравится делать это как цикл Bash, потому что проще добавлять дополнительные команды вместо того, чтобы иметь длинную и громоздкую команду, выполняющую все это, а также обрабатывать ошибки.

Я не знаю, если это то, что вы намереваетесь, но вот предложение.

#!/bin/bash 

# Receives site group file as argument1 
# Receives symlink name as argument 2 
# Further arguments will be passed to the command called 

sites_dir="/var/www/vhosts" 
commands_dir="wp-content/plugins"  

if ! [[ -f $1 ]] ; then 
    echo "Site list not found : $1" 
    exit 
fi 

while IFS= read -r site 
do 
    site_dir="$sites_dir/$site" 
    if ! [[ -d $site_dir ]] ; then 
    echo "Unknown site : $site" 
    continue 
    fi 
    command="$site_dir/$commands_dir/$2" 
    if ! [[ -x $command ]] ; then 
    echo "Missing or non-executable command : $command" 
    continue 
    fi 
    "$command" "${@:3}" 
done <"$1" 
+0

Я немного новичок в сценариях bash, поэтому позвольте мне объяснить немного больше, что мне нужно, и, возможно, вы можете сказать мне, выполнит ли ваш сценарий это. Я благодарю вас за помощь в этом. У меня есть текстовый файл группы, называемый prod.txt, и позволяет сказать еще один, называемый test.txt. Каждый текстовый файл имеет имена наименований верхнего уровня для установок Wordpress, таких как site1 site2 и т. Д. Я хочу только прокручивать каталоги верхнего уровня, которые содержатся только в указанном текстовом файле. – Cole

+0

Я хочу, чтобы затем войти в каталог wp-content/plugins в каждой установке wordpress и запустить команду, чтобы сначала проверить, существует ли уже существующая папка для плагина «wp-rocket» или символическая ссылка. Если существует, удалите папку или символическую ссылку. Последняя команда должна была бы создать новую символическую ссылку: Команда примера: 'ln -s/var/www/repositories/wp-rocket wp-rocket' – Cole