2017-02-16 4 views
0

Ich habe eine große Anzahl von einzelnen WordPress-Installationen auf meinem Linux-Server. Ich möchte Textdateien erstellen, die Verzeichnisnamen für Gruppen meiner Websites enthalten.Befehl in mehreren Verzeichnissen ausführen

Zum Beispiel alle meine Seiten leben in /var/www/vhosts und ich kann einen Satz von 100 Websites in einer Textdatei wie

site1 
site2 
site3 
site4 

Wie kann ich ein Skript schreiben, gruppieren möchten, die nur durch die Schleife wird die Verzeichnisse angegeben in der Gruppe Textdateien und führen Sie einen Befehl aus. Mein Ziel ist es, einige der WordPress-Plugins zu symbolisieren und ich möchte nicht manuell nach Verzeichnis suchen müssen, wenn ich nur Gruppen erstellen und den Befehl innerhalb dieser Gruppe von Verzeichnissen ausführen kann.

Wechseln Sie für jede Site in der Gruppendatei in den Ordner /wp-content/plugins und führen Sie den angegebenen Symlink-Befehl aus.

+0

Können Sie Beispiele für Eingabe und Ausgabe angeben? – MosheZada

Antwort

0

Abhängig von Ihren Zielen können Sie dies möglicherweise mit einem Einzeiler unter Verwendung von find und einer -exec Aktion erreichen. Ich mag es, es als Bash-Schleife zu machen, weil es einfacher ist, zusätzliche Befehle hinzuzufügen, anstatt einen langen und unhandlichen Befehl zu haben, der alles erledigt, sowie Fehler zu behandeln.

Ich weiß nicht, ob das ist, was Sie beabsichtigen, aber hier ist ein Vorschlag.

#!/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

Ich bin ein wenig neu in der Bash-Scripting, also lassen Sie mich ein bisschen mehr erklären, was ich brauche, und vielleicht können Sie mir sagen, ob Ihr Skript das erreicht. Ich weiß es zu schätzen, dass Sie dabei geholfen haben. Ich habe eine Gruppentextdatei namens prod.txt und sagen wir mal eine andere namens testing.txt. Jede Textdatei hat Top-Level-Verzeichnisnamen für die Wordpress-Installationen wie site1 site2 etc .. Ich möchte nur Top-Level-Verzeichnisse durchlaufen, die nur mit der angegebenen Textdatei enthalten sind. – Cole

+0

Ich möchte dann das wp-content/plugins-Verzeichnis in jeder Wordpress-Installation eingeben und einen Befehl ausführen, um zuerst zu prüfen, ob ein Ordner für ein Plugin "wp-rocket" oder ein Symlink bereits existiert. Falls vorhanden, löschen Sie den Ordner oder den Symlink. Der letzte Befehl wäre ein neuer symbolischer Link: Beispiel Befehl: 'ln -s/var/www/repositories/wp-rocket wp-rocket' – Cole

Verwandte Themen