我正在嘗試使用檔案名稱中的日期作為參數將目錄中的所有檔案上傳到 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")"