在多个目录中执行命令

时间:2017-02-16 18:56:30

标签: linux wordpress bash symlink

我的Linux服务器上有一大堆单安装WordPress站点。我想创建包含我的网站组的目录名的文本文件。

例如,我的所有网站都位于/var/www/vhosts,我可能想要在一个文本文件中对一组100个网站进行分组,例如

site1
site2
site3
site4

如何编写只循环组文本文件中指定的目录并执行命令的脚本。我的目标是对一些WordPress插件进行符号链接,如果我可以创建组并在该组目录中执行命令,我不想手动逐个目录。

对于组文件中的每个站点,转到/wp-content/plugins文件夹并执行指定的符号链接命令。

1 个答案:

答案 0 :(得分: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"