« [bash]全ローカルユーザーに同じ処理(クロームインストール) | トップページ | [bash]全てのローカルアカウントにファイルをコピーする »

[bash]全てのローカルアカウントのゴミ箱をからにする

ダウンロード - 全ユーザーゴミ箱空に.zip


実行ユーザーの実行環境による違いに対応するのに苦労した

1:Jamf等を利用して実行する
2:ターミナルから実行
3:Applescriptで実行(do shell script)
4:リモートログインからのシェル利用
5:Payload-Free Installer Packageなんかでも使える構文だと思うけどどうかな?
UI利用だとdo shell scriptは指紋認証使えるので超便利

【スクリプトエディタで開く】|

#!/bin/bash
#com.cocolog-nifty.quicktimer.icefloe

########################################
###管理者インストールしているか?チェック
USER_WHOAMI=$(/usr/bin/whoami)
/bin/echo "実行したユーザーは:$USER_WHOAMI"
if [ "$USER_WHOAMI" != "root" ]; then
  /bin/echo "このスクリプトを実行するには管理者権限が必要です。"
  /bin/echo "sudo で実行してください"
  exit 1
else
  ###実行しているユーザー名
  SUDO_USER=$(/bin/echo "$HOME" | /usr/bin/awk -F'/' '{print $NF}')
  /bin/echo "実行ユーザー:" "$SUDO_USER"
fi

###コンソールユーザーにのみ処理する
CONSOLE_USER=$(/bin/echo "show State:/Users/ConsoleUser" | /usr/sbin/scutil | /usr/bin/awk '/Name :/ { print $3 }')
/bin/echo "CONSOLE_USER:$CONSOLE_USER"
if [ -z "$CONSOLE_USER" ]; then
  /bin/echo "コンソールユーザーが無い=電源入れてログインウィンドウ状態"
else
  /bin/echo "コンソールユーザーに対しての処理"
  ###エラーよけにゴミ箱に削除する物を作っておく
  /usr/bin/sudo -u "$CONSOLE_USER"  /usr/bin/touch "/Users/$CONSOLE_USER/.Trash/ForEmptyTrash.tmp"
  ##この1秒がないとゴミ箱がすでに空の場合にエラーが出る
  /bin/sleep 1
  ###ゴミ箱からに
  /usr/bin/sudo -u "$CONSOLE_USER" /usr/bin/osascript -e "tell application id \"com.apple.Finder\" to  empty the trash"
fi

########################################
###ローカルのユーザーアカウントを取得
TEXT_RESULT=$(/usr/bin/dscl localhost -list /Local/Default/Users PrimaryGroupID | /usr/bin/awk '$2 == 20 { print $1 }')

###リストにする
read -d '\\n' -r -a LIST_USER <<<"$TEXT_RESULT"

###リスト内の項目数
NUM_CNT=${#LIST_USER[@]}
/bin/echo "ユーザー数:" "$NUM_CNT"
########################################
##リストの内容を順番に処理
for ITEM_LIST in "${LIST_USER[@]}"; do
  /bin/echo "LIST_USER:MKDIR:" "${ITEM_LIST}"
  if [ "$SUDO_USER" == "root" ]; then
    ###ユーザーチェンジして
    /usr/bin/su - "${ITEM_LIST}"
  fi
  ##ゴミ箱の中を空にする
  /usr/bin/sudo -u "${ITEM_LIST}" /usr/bin/find "/Users/${ITEM_LIST}/.Trash" -mindepth 1 -delete
  ##ルートに戻す
  if [ "$SUDO_USER" == "root" ]; then
    ###ユーザーチェンジして
    /usr/bin/su - root
  fi

done

/bin/echo "処理終了しました"

exit 0

|

« [bash]全ローカルユーザーに同じ処理(クロームインストール) | トップページ | [bash]全てのローカルアカウントにファイルをコピーする »

Bash」カテゴリの記事

Admin Maintenance」カテゴリの記事

Trash」カテゴリの記事