이전 명령에서 다시 실행되는 목록에서 루프를 어떻게 생성합니까?

이전 명령에서 다시 실행되는 목록에서 루프를 어떻게 생성합니까?

모든 하위 디렉터리의 모든 소유자를 나열한 다음 해당 ID에 sesu에 액세스할 수 있는지 각 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
.
.
.
.

답변1

awk의 printf 기능을 사용한 다음 ksh로 파이프하십시오.

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

생성해야 한다

sesu userid1
sesu userid2
sesu userid3
sesu userid4

| ksh괜찮을 때 간단히 추가하세요

ls -lrth /apps/wldomains | awk '$1 ~/^d/ { printf "sesu %s\n", $3 }'| ksh
  • 나도 압축해서 grep | awk넣었어awk

답변2

파싱하지 않고ls:

find /apps/wldomains -type d -exec stat -c %U {} \; | sort -u | xargs -n 1 sesu -
  • find /apps/wldomains -type d/apps/wldomains(자신을 포함하여 ) 아래의 모든 디렉토리를 찾습니다 /apps/wldomains.

  • stat -c %U찾은 디렉토리 소유자의 사용자 이름을 출력합니다.

  • sort -u이러한 사용자 이름을 가져와 고유한 사용자 이름 목록으로 정렬합니다.

  • xargs -n 1 sesu -이 목록을 가져와 sesu -각각에 대해 실행합니다.

Solaris에서는 GNU coreutils 패키지를 설치 gstat하고 stat.

관련 정보