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
이 문제를 해결하는 한 가지 방법은 경로의 문자 수를 고려하고 연도, 월 및 일 변수를 설정할 때 각 시작 번호에 문자 수(이 경우 26)를 추가하는 것입니다.
또 다른 방법은 for 루프 이전에 적절한 디렉토리로 변경하고(완료된 후에 다시 변경하는 것) for 루프가 되어 변수가 예상한 대로 for file in t*; do
설정되는 것입니다 .file
답변2
basename을 통해 실행할 수도 있습니다.
filename="$(basename -- "$file")"