LINUX: Liste alle Verzeichnisse, stoßen Sie in einem bash-array
Hier ist die end-Ergebnis bin ich versucht:
Habe ich mehr als 15 Benutzer eine geklonte Instanz meiner Anwendung, manchmal brauche ich, um Dateien zu aktualisieren (so ziemlich alle die gleiche bleiben-alles ist dynamisch. Dies ist für updates/neue features). Ich schrieb eine ziemlich einfache bash-Skript, das musste ich manuell jeden Benutzer von /home/in das array. Aber ich brauche dieses zu skalieren.
Wie kann ich ein directory-listing (so etwas wie ein LS-Befehl) - feed-NUR VERZEICHNIS Namen dann in ein bash-array. Wahrscheinlich werde ich wollen, diesen Befehl in die bash-Datei, wenn, weil ich ll wollen zu greifen alle Benutzer in die /home/- Verzeichnis, push in das array (z.B.: Web-user adam( john jack )
Hier ist eine Momentaufnahme von dem, was mein Aktuelles Skript sieht wie (nicht-dynamische Benutzer-Liste)
webUsers( adam john jack )
for i in "${webUsers[@]}"
do
cp /home/mainSource/public_html/templates/_top.tpl /home/$i/public_html/templates
done
Wie kann ich das erreichen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hierzu:
werden und der Inhalt wird so Aussehen:
Oder, wenn Sie nicht möchten, dass das übergeordnete Verzeichnis:
und erhalten Sie:
Dem folgenden Skript wird eine Schleife über alle Benutzer-Verzeichnisse in
/home
. Es wird auch unbedingt versuchen, die/public_html/templates
- Verzeichnis. Wenn es noch nicht existiert, wird es erstellt. Wenn es hat vorhanden ist, dieser Befehl hat im wesentlichen nichts.public_html/templates
OrdnerKann es einfacher sein, um einen link zu dem source-Verzeichnis, und dann können Sie einfach aktualisieren Sie es in einem Ort.
Nur richten Sie für jeden Benutzer-Verzeichnis, so dass das gemeinsame-Dateien sind alle gezogen aus einem Verzeichnis namens " common_files (oder was auch immer Sie möchten), und führen Sie dann diesen Befehl in jedes home-Verzeichnis:
update /location/of/files/Sie/müssen und es werden automatisch propagiert.
Mit bash-Sie können tatsächlich machen diese ziemlich kurz und einfach. Liste des aktuellen Verzeichnisses und speichern es in ein array:
oder
ls . | bash -c 'readarray i'
Zur Verwendung der Daten:
ls . | bash -c 'readarray i && for j in ${i[*]}; do <-command->; done'