
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
答え2
basenameを介して実行することもできます。
filename="$(basename -- "$file")"