/ bin / awsのパラメータリストが長すぎます。

/ bin / awsのパラメータリストが長すぎます。

私は次のように設定されたテキストファイルを繰り返すスクリプトを書いています。

snap-foo    bar     20170202

このテキストファイルには、主にスナップショットID、リンクされたインスタンスを識別するために使用されるタグ、およびAWSでスナ​​ップショットが作成されたタイムスタンプが含まれています。スクリプトはほぼ完了しましたが、最後の部分で作業中にエラーが発生し続けます。

#!/bin/bash

THIRTY_DAYS_AGO=$(date --date '30 days ago' "+%Y%m%d")
FILE=/home/rkahil/sorted_snaps.txt

for a in $FILE
do
        SNAP_ID=`awk {'print $1'} "$FILE"`
        FORMAT_FILE=`sed -i 's/T.*//' "$FILE"`
        TIMESTAMP_SNAPS=`cat "$FILE" | awk {'print $3'}`
        if [[ "$FORMATTED_DATE" -lt "$THIRTY_DAYS_AGO" ]];
        then
                aws ec2 delete-snapshot --dry-run "$SNAP_ID" #Where the error is
        fi
done

私が得るエラーは次のとおりです。

./removeOldSnapShots.sh: line 13: /usr/bin/aws: Argument list too long

誰かがこれを行う正しい方法が何であるかを教えてもらえますか?

答え1

ファイルの内容を繰り返すのではなく、すべての内容を一度に処理するため、特に最初の列がすべてSNAP_ID含まれます。これは単一のコマンドとして使用するには多すぎます。

次のようなものを使用してファイルを1行ずつ処理する必要があります。

< "$FILE" while read SNAP_ID _ TIMESTAMP_SNAPS; do
    if ...
done

readこの手法をより広範囲に適用する場合は、読書内容(特殊文字、バックスラッシュなど)の影響に関するさまざまな注意事項をお読みください。シェルはそれほど良いファイル処理ツールではありません。

関連情報