在多个目录中执行命令
我的Linux服务器上有大量的单个安装WordPress站点。我想创建包含我的网站组的目录名称的文本文件。在多个目录中执行命令
例如我所有的网站住在/var/www/vhosts
,我可能要组一个文本文件中的一组100个网站,如
site1
site2
site3
site4
我怎么能写会遍历只有目录中指定的脚本在组文本文件中执行一个命令。我的目标是符号链接一些WordPress插件,如果我只能在该组目录中执行命令并执行该命令,我不想通过目录手动进入目录。
对于组文件中的每个站点,请转至/wp-content/plugins
文件夹并执行指定的symlink命令。
根据您的目标,您可以使用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"
我对bash脚本有点新,所以让我解释一下我需要的东西,也许你可以告诉我,如果你的脚本完成了。我很感谢你帮助这个。 我有一个名为prod.txt的组文本文件,可以说另一个名为testing.txt。每个文本文件都有Wordpress安装的顶级目录名称,例如site1 site2等。 我只想循环遍历指定文本文件中包含的顶级目录。 – Cole
我想在每次wordpress安装中输入wp-content/plugins目录并运行一个命令来首先检查插件“wp-rocket”或符号链接的文件夹是否已经存在。如果存在,请删除文件夹或符号链接。最后的命令是创建一个新的符号链接: 示例命令: 'ln -s/var/www/repositories/wp-rocket wp-rocket' – Cole
你能提供输入输出例子吗? – MosheZada