awk出力を使用してディレクトリ所有者を動的に変更するには?

awk出力を使用してディレクトリ所有者を動的に変更するには?

私がしたいこと:

  • ユーザーとそのホームディレクトリのリストを取得する/etc/passwd
  • ユーザー名と自宅のアドレスをパラメータとして使用し、これらのディレクトリの所有権をそのユーザーに変更します。

現在の出力:

切り取られた出力: cat /etc/passwd

##
# User Database
# 
# Note that this file is consulted directly only when the system is running
# in single-user mode.  At other times this information is provided by
# Open Directory.
#
# See the opendirectoryd(8) man page for additional information about
# Open Directory.
##
nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
_uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico
_taskgated:*:13:13:Task Gate Daemon:/var/empty:/usr/bin/false
_networkd:*:24:24:Network Services:/var/networkd:/usr/bin/false

切り取られた出力:cat /etc/passwd | grep "^[#;]" -v

nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
_uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico
_taskgated:*:13:13:Task Gate Daemon:/var/empty:/usr/bin/false
_networkd:*:24:24:Network Services:/var/networkd:/usr/bin/false
_installassistant:*:25:25:Install Assistant:/var/empty:/usr/bin/false

先行する「_」を削除する必要があるため、次のコマンドを使用しました。

切り取られた出力:cat /etc/passwd | grep "^[#;]" -v | sed s/"_"//

nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico
taskgated:*:13:13:Task Gate Daemon:/var/empty:/usr/bin/false
networkd:*:24:24:Network Services:/var/networkd:/usr/bin/false

最後に、次のコマンドを使用してユーザー名とディレクトリをインポートしましたawk

cat /etc/passwd | grep "^[#;]" -v | sed s/"_"// | awk -F\: '{print $1" "$6}' (出力が切り捨てられる)

nobody /var/empty
root /var/root
daemon /var/root
uucp /var/spool/uucp
taskgated /var/empty
networkd /var/networkd
installassistant /var/empty
lp /var/spool/cups
postfix /var/spool/postfix
scsd /var/empty
ces /var/empty
appstore /var/db/appstore

これが私が追加したいことです!

取る最初パラメータと所有権の割り当て第二これに対する主張。どうすればいいですか?

ベストアンサー1

最後のファイルは、次のようにbashで処理できます。

cat YOURFILE | \
while read CMD; do 
   field1=${CMD% *};    # take first field
   field2=${CMD#* };    # take second field
   echo do $field1 with $field2;  # do something with it
done

したがって、正しく機能するには、echoを適切なchownコマンドに置き換える必要があります。からインポートBashスクリプトから1行ずつ読み込む

おすすめ記事