2017-02-16 24 views
0

私は、Linuxサーバーに大規模なシングルインストールWordPressサイトを持っています。私は私のサイトのグループのディレクトリ名を含むテキストファイルを作成したい。複数のディレクトリでコマンドを実行

は、例えば、すべての私のサイトは/var/www/vhostsに住んでいると私は、次のような

site1 
site2 
site3 
site4 

がどのようにディレクトリのみをループが指定するスクリプトを書くことができるグループにテキストファイルに100社のウェブサイトのセットをすることができグループテキストファイルに保存し、コマンドを実行します。私の目標は、WordPressプラグインの一部をシンボリックリンクすることです。グループを作成してそのディレクトリのグループ内でコマンドを実行できるのであれば、手動でディレクトリごとディレクトリに移動する必要はありません。

グループファイルの各サイトについては、/wp-content/pluginsフォルダに移動し、指定されたsymlinkコマンドを実行します。

+0

入力と出力の例を提供できますか? – MosheZada

答えて

0

あなたの目標に応じて、find-execアクションを使用して1ライナーで達成できるかもしれません。私はそれを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と呼ばれます。各テキストファイルには、site1 site2などのWordpressインストールのトップレベルのディレクトリ名があります。 指定したテキストファイルのみに含まれるトップレベルのディレクトリをループします。 – Cole

+0

それぞれのwordpressにwp-content/pluginsディレクトリを入力して、最初にプラグイン "wp-rocket"のフォルダかシンボリックリンクが存在するかどうかを確認するコマンドを実行します。いずれかが存在する場合は、フォルダまたはシンボリックリンクを削除します。最後のコマンドは、新しいシンボリックリンクを作成することです: 例コマンド: 'ln -s/var/www/repositories/wp-rocket wp-rocket' – Cole

関連する問題