Wie erstelle ich eine Schleife aus einer Liste, die aus einem vorherigen Befehl resultiert?

Wie erstelle ich eine Schleife aus einer Liste, die aus einem vorherigen Befehl resultiert?

Ich möchte ein Skript erstellen, das alle Besitzer aller Unterverzeichnisse auflistet und dann jede ID überprüft, wenn ich über Sesu auf die IDs zugreifen kann.

**$**ls -lrth /apps/wldomains | grep '^d' | awk '{ print $3 }'
userid1
userid2
userid3
userid4
.
.
.

**$**sesu - userid1
Please enter your password:
**userid1@SERVER:$**sesu - userid2
Please enter your password:
**userid2@SERVER:$**sesu - userid3
.
.
.
.

Antwort1

Verwenden Sie die Printf-Funktion von awk und leiten Sie sie dann an ksh weiter.

ls -lrth /apps/wldomains | awk '$1 ~/^d/ { printf "sesu %s\n", $3 }'

sollte erzeugen

sesu userid1
sesu userid2
sesu userid3
sesu userid4

einfach hinzufügen | ksh, wenn OK

ls -lrth /apps/wldomains | awk '$1 ~/^d/ { printf "sesu %s\n", $3 }'| ksh
  • Ich habe auch verdichtet grep | awkinawk

Antwort2

Ohne Parsenls:

find /apps/wldomains -type d -exec stat -c %U {} \; | sort -u | xargs -n 1 sesu -
  • find /apps/wldomains -type dfindet alle Verzeichnisse darunter /apps/wldomains(einschließlich /apps/wldomainssich selbst).

  • stat -c %Ugibt den Benutzernamen des Besitzers des gefundenen Verzeichnisses aus.

  • sort -unimmt diese Benutzernamen und sortiert sie in eine Liste mit unterschiedlichen Benutzernamen.

  • xargs -n 1 sesu -nimmt diese Liste und führt sie sesu -für jeden von ihnen aus.

Installieren Sie unter Solaris das GNU-Coreutils-Paket und verwenden Sie gstatanstelle von stat.

verwandte Informationen