ファイル名の日付をパラメータとして使用して 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
。
この問題を解決する 1 つの方法は、パス内の文字数を考慮し、年月日変数を設定するときに各開始番号に文字数 (この場合は 26) を追加することです。
別の方法としては、 for ループの前に適切なディレクトリに変更し(そして終了したら元に戻す)、 for ループが になり、変数が期待どおりにfor file in t*; do
設定されると思います。file
答え2
basenameで実行することもできます
filename="$(basename -- "$file")"