bash xargsとsleepを使用してチャンネルからSlackメンバーを削除しますか?

bash xargsとsleepを使用してチャンネルからSlackメンバーを削除しますか?

「プライベート」Slackチャンネルから1人のグループを削除したいです。

ユースケース:さて、ちょうど間違ったチャンネルに137人を追加しました!

SlackメンバーIDのリストは、Airtableスプレッドシートの列から取得されます。

  1. Airtableからセル範囲をコピーする
  2. 単一のスペースで区切られた文字列で値をフォーマットする
  3. MemberIDリストにチャンネルIDを追加する前に

次のように入力パラメータを設定します。

$ sh script.sh ChannelID MemberID1[ MemberID2 MemberID3 ...]

#!/bin/bash
args=("$@")
channel=${args[0]}
for arg in "${@:2}"; do
  curl -X POST \
    -H 'Authorization: Bearer foobar' \
    -H "Content-Type":"application/json; charset=utf-8" \
    --data '{"channel":"'"$channel"'", "user":"'"$arg"'"}' \
    https://slack.com/api/conversations.kick;
done

これSlack API メソッド私のカーリングは一度に1つのMemberIDでのみ動作するように制限され、毎分50個のcURL POSTのみを許可するように制限されています(レベル3)。 50個以上のMemberIDリストを取得し、1分間隔で50人ずつバッチ処理するようにしたいと思います。

私はxargsを調べ始め、次のことをしました。

if [ ${#args[@]} -gt 2 ]; then
  echo "channel ID: $channel"
  echo "${#args[@]} items in the argument array"
  echo "${@:2}"
  xargs -n 2 <<<${@:2} | xargs -I {} echo {} | sed -e 's/ /,/g'
fi
$ sh test.sh FO1O2B3A4R 1 2 3 4 5 6 7 8 9 10 11
    channel ID: FO1O2B3A4R
    12 items in the argument array
    1 2 3 4 5 6 7 8 9 10 11
    1,2
    3,4
    5,6
    7,8
    9,10
    11

xargsを使用して50のメンバーのバッチを作成し、各メンバーに対してcURLコマンドを実行し、バッチのsleep 60s実行間に1分()を待つことはできますか?

ベストアンサー1

50項目をバッチ処理するには、ループを使用するのがxargs -n 50おそらく最良の選択肢でしょう。while

例えば

list="user1 user2 user3 user4 user5 user6 user7 user8 user9 user10 user11 user12 user13 user14 user15 user16 user17 user18 user19 user20 user21 user22 user23 user24 user25 user26 user27 user28 user29 user30 user31 user32 user33 user34 user35 user36 user37 user38 user39 user40 user41 user42 user43 user44 user45 user46 user47 user48 user49 user50 user51 user52 user53 user54 user55 user56 user57 user58 user59 user60 user61 user62 user63 user64 user65 user66 user67 user68 user69 user70 user71 user72 user73 user74 user75 user76 user77 user78 user79 user80 user81 user82 user83 user84 user85 user86 user87 user88 user89 user90 user91 user92 user93 user94 user95 user96 user97 user98 user99 user100"

echo "$list" | xargs -n 50 echo | while read line
do
  echo Do Something with $line
  sleep 61
done

これを実行すると、ループが2回実行されることがわかります。

Do Something with user1 user2 user3 user4 user5 user6 user7 user8 user9 user10 user11 user12 user13 user14 user15 user16 user17 user18 user19 user20 user21 user22 user23 user24 user25 user26 user27 user28 user29 user30 user31 user32 user33 user34 user35 user36 user37 user38 user39 user40 user41 user42 user43 user44 user45 user46 user47 user48 user49 user50
Do Something with user51 user52 user53 user54 user55 user56 user57 user58 user59 user60 user61 user62 user63 user64 user65 user66 user67 user68 user69 user70 user71 user72 user73 user74 user75 user76 user77 user78 user79 user80 user81 user82 user83 user84 user85 user86 user87 user88 user89 user90 user91 user92 user93 user94 user95 user96 user97 user98 user99 user100

whileループ内で欲しいものは何でもできます

おすすめ記事