¿Cómo creo un bucle a partir de una lista resultante de un comando anterior?

¿Cómo creo un bucle a partir de una lista resultante de un comando anterior?

Me gustaría crear una secuencia de comandos que enumere todos los propietarios de todos los subdirectorios y luego verifique cada ID si tengo acceso a las ID.

**$**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
.
.
.
.

Respuesta1

use la función printf de awk, luego canalice a ksh.

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

debe generar

sesu userid1
sesu userid2
sesu userid3
sesu userid4

simplemente agregue | kshcuando esté bien

ls -lrth /apps/wldomains | awk '$1 ~/^d/ { printf "sesu %s\n", $3 }'| ksh
  • También compacté grep | awkenawk

Respuesta2

sin analizarls:

find /apps/wldomains -type d -exec stat -c %U {} \; | sort -u | xargs -n 1 sesu -
  • find /apps/wldomains -type dencontrará todos los directorios debajo /apps/wldomains(incluido /apps/wldomainsél mismo).

  • stat -c %Ugenerará el nombre de usuario del propietario del directorio encontrado.

  • sort -utomará estos nombres de usuario y los ordenará en una lista de nombres de usuario distintos.

  • xargs -n 1 sesu -tomará esta lista y la ejecutará sesu -para cada uno de ellos.

En Solaris, instale el paquete GNU coreutils y utilícelo gstaten lugar de stat.

información relacionada