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を使用する場所を示します。

この問題を解決する1つの方法は、パス内の文字数を考慮し、年月日変数を設定するときに各開始数字に文字数(この場合は26)を追加することです。

もう1つのアプローチは、forループの前に適切なディレクトリに変更し(完了した後に再び変更)、forループになり、変数を期待どおりにfor file in t*; do設定することです。file

おすすめ記事