如何從上一個命令返回的列表中建立循環?

如何從上一個命令返回的列表中建立循環?

我想建立一個腳本,列出所有子目錄的所有擁有者,然後檢查每個 ID(如果我有權存取 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

| ksh確定後只需添加

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.

相關內容