前のコマンドから得られたリストからループを作成するにはどうすればよいですか?

前のコマンドから得られたリストからループを作成するにはどうすればよいですか?

すべてのサブディレクトリの所有者を一覧表示し、各 ID に sesu アクセスできるかどうかを確認するスクリプトを作成したいと思います。

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

| kshOKなら追加するだけ

ls -lrth /apps/wldomains | awk '$1 ~/^d/ { printf "sesu %s\n", $3 }'| ksh
  • 私も圧縮しましgrep | awkawk

答え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

関連情報