sh+aws cli, s3 bucket에 파일 전송하기

n0wkim·2022년 7월 5일
0
post-thumbnail

서론

사실 19년도 1학기에 학교에서 처음 '컴퓨터 설계와 실험1'(aka 컴실1) 을 들으면서 처음 마주친 친구가 shell 이었다.

그 당시 나는 c언어도 너무 벅차서 허덕이던 중이었다.
매주 새로운 언어나 툴로 html, javascript, php, shell, java, mfc등을 사용하여 과제(?)를 내 주고, 보고서를 예비보고서, 결과보고서 두 개나 작성하라고 하는 미친 과목이었다.

물론 당연히 배워가는 것은 없었다. 과제를 위한 공부를 했고, 그러한 공부는 과제가 끝나면 머릿속에 당연히 남아있지 않았다.

그렇게 다시는 만나지 않을 것 같은 shell은 이후 '서강신청' 서비스를 만들 때 docker를 사용하면서 다시 마주치게 되었고, 그 결과 힘겹고 가파른 러닝커브를 경험하게 되었다.

물론 그 때도 배포를 위한 도커 이미지만을 만들고, 실행해서 잘 되기만 하면 되었기 때문에, 또한 shell 을 그렇게 많이 사용하지 않았기 때문에 shell 에 대한 지식은 머릿속에서 지워졌다.

참을 인(忍)자 세 번이면 살인도 면한다.

그렇게 shell을 마주쳐도 귀찮음과... 길어봤자 1~2줄... 이러한 이유로 매번 나중으로 미뤘었는데, 다시 한 번 마주치게 되었다.

img, 그 img에 대응되는 label 데이터를 s3에 upload해야 했다.

근데 문제는 그 img, label이 각각 약 2220개, 총 4400개 정도였다는 것이 문제였다.

  1. 이렇게 데이터가 많을 경우, aws console로 올리게 되면 느리다.
  2. 그렇다면 aws cli를 사용해야 한다.

그렇게 세 번 shell을 마주쳤다. 네 번째에 shell 을 마주친다면 내가 죽을 수도 있기 때문에, 내가 먼저 shell을 죽이기로 했다.

생각보다 쉬움

내가 해야 하는 것은 다음과 같다.

  1. 파일을 line by line으로 읽는다.
  2. 해당 line에 있는 data를 s3로 옮긴다.
  3. 이 일을 750번 반복한다.
# 읽어올 파일명 선언
filename='targetdata.csv'
# 변수 선언
i=1

# 파일의 한 줄씩 읽어오기
while read line; do
if [ $i -ne 1 ];then          # 맨 첫 번째 line이 "img_name"이라는 col이어서 무시
    line=${line:1:-1}         # 맨 앞의 첫 글자와 맨 마지막 글자는 "라서 제외
    aws s3 mv mylocalfile/$line s3://mys3bucket/img
fi
if [ $i -eq 751 ];then        # 750개까지 돌고 break
    break
fi
i=$(($i + 1))
done < $filename              # filename 읽어

shell매우매우 예민한 친구여서 띄어쓰기가 중요하다는 사실을 알게 되었다.

음... 뭐... 사실 검색을 많이 해서 조합한 코드이고, 코드를 작성할 때는 되게 오래 걸렸는데, 리뷰하려고 보니까 되게 별거 없다...

그래도 나는 이제 shell로

for loop
파일 읽기
문자열 parsing하기
조건문 작성하기

를 할 수 있게 되었다.
ㅋㅋ...ㅠ

profile
끙끙대며 배우는 중

0개의 댓글