У меня есть большой набор однострочных сайтов WordPress на моем Linux-сервере. Я хочу создать текстовые файлы, содержащие имена каталогов для групп моих сайтов.
Например, все мои сайты живут в /var/www/vhosts
и я могу захотеть сгруппировать набор из 100 сайтов в текстовый файл, например
site1
site2
site3
site4
Как написать сценарий, который будет проходить через только каталоги, указанные в текстовых файлах группы, и выполнить команду. Моя цель - символизировать некоторые из плагинов WordPress, и я не хочу, чтобы вручную катавать каталог по каталогу, если я могу просто создавать группы и выполнять команду в этой группе каталогов.
Для каждого сайта в файле группы перейдите в папку /wp-content/plugins
и выполните указанную команду symlink.
В зависимости от ваших целей вы можете достичь этого с помощью однострочного -exec
с помощью 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"
ln -s /var/www/repositories/wp-rocket wp-rocket