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")"