2017-02-16 192 views
0

我的Linux服務器上有大量的單個安裝WordPress站點。我想創建包含我的網站組的目錄名稱的文本文件。在多個目錄中執行命令

例如我所有的網站住在/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的組文本文件,可以說另一個名爲testing.txt。每個文本文件都有Wordpress安裝的頂級目錄名稱,例如site1 site2等。 我只想循環遍歷指定文本文件中包含的頂級目錄。 – Cole

+0

我想在每次wordpress安裝中輸入wp-content/plugins目錄並運行一個命令來首先檢查插件「wp-rocket」或符號鏈接的文件夾是否已經存在。如果存在,請刪除文件夾或符號鏈接。最後的命令是創建一個新的符號鏈接: 示例命令: 'ln -s/var/www/repositories/wp-rocket wp-rocket' – Cole