Выполнить команду в нескольких каталогах

0

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

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

site1
site2
site3
site4

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

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

  • 0
    Можете ли вы предоставить примеры ввода и вывода?
Теги:
symlink

1 ответ

0

В зависимости от ваших целей вы можете достичь этого с помощью однострочного -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"
  • 0
    Я немного новичок в скриптах bash, поэтому позвольте мне объяснить немного больше, что мне нужно, и, возможно, вы можете сказать мне, если ваш скрипт выполнит это. Я ценю вашу помощь в этом. У меня есть групповой текстовый файл с именем prod.txt и, скажем, еще один, который называется test.txt. Каждый текстовый файл имеет имена каталогов верхнего уровня для установок Wordpress, такие как site1 site2 и т. Д. Я хочу зацикливаться только на каталогах верхнего уровня, которые содержатся только в указанном текстовом файле.
  • 0
    Затем я хочу войти в каталог wp-content / plugins в каждой установке WordPress и запустить команду, чтобы сначала проверить, существует ли папка для плагина "wp-rocket" или символическая ссылка. Если существует, удалите папку или символическую ссылку. Последней командой будет создание новой символической ссылки: Пример команды: ln -s /var/www/repositories/wp-rocket wp-rocket

Ещё вопросы

Сообщество Overcoder
Наверх
Меню