for 루프 구축 aws 명령에서 파일 이름의 하위 문자열을 인수로 사용

for 루프 구축 aws 명령에서 파일 이름의 하위 문자열을 인수로 사용

s3 위치를 생성하기 위해 파일 이름의 날짜를 매개변수로 사용하여 디렉터리의 모든 파일을 s3에 업로드하려고 합니다. 이것이 내가 지금까지 가지고 있는 것입니다.

for file in /home/ec2-user/clickparts/t*; do 
    year="${file:9:4}"
    month="${file:14:2}"
    day="${file:17:2}"
    aws s3 cp "$file" s3://mybucket/json/clicks/clickpartition/$year/$month/$day/
done

다음은 "the_date=2017-05-04" 파일의 출력입니다.

upload: ./the_date=2017-05-04 to s3://mybucket/json/clicks/clickpartition/-use//c/ic//the_date=2017-05-04

파일을 넣고 싶어요

s3://mybucket/json/clicks/clickpartition/2017/05/04/the_date=2017-05-04

답변1

"the_date=2017-05-04" 파일이 주어지면 for 루프는 변수를 file로 설정합니다 /home/ec2-user/clickparts/the_date=2017-05-04. 9번째 문자에서 4자를 가져오면 가 표시됩니다 -use. 이는 year변수 Content를 사용하는 위치를 표시합니다.

이 문제를 해결하는 한 가지 방법은 경로의 문자 수를 고려하고 년 월 일 변수를 설정할 때 각 시작 숫자에 문자 수(이 경우 26)를 추가하는 것입니다.

또 다른 접근 방식은 for 루프 이전에 적절한 디렉터리로 변경하고(완료된 후에 다시 변경) for 루프가 가 되어 변수를 예상한 대로 for file in t*; do설정하는 것입니다 .file

답변2

basename을 통해 실행할 수도 있습니다. filename="$(basename -- "$file")"

관련 정보