/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첫 번째 열을 모두 포함하게 되는데, 이는 단일 명령으로 사용하기에는 너무 많습니다.

다음과 같은 것을 사용하여 파일을 한 줄씩 처리해야 합니다.

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

read이 기술을 더 광범위하게 적용하려는 경우 읽는 내용(특수 문자, 백슬래시 등)의 영향과 관련된 여러 가지 주의 사항을 읽어 볼 수 있습니다 . 쉘은 그다지 좋은 파일 처리 도구는 아닙니다.

관련 정보