3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ファイル名が固定じゃないデータをBOXDriveからS3へアップロードする

Last updated at Posted at 2022-12-09

はじめに

BOXDrive (エクスプローラー) からS3へコマンドでデータをアップロードする際、
ファイル名・S3パスともに可変にさせたかったのでコードを書きました。
cmdは初めて書く初心者です。

使用コード

cmd
REM 月次でフォルダを分けたいため今日の日付-1月のyyyymmを作成
set dt=%date%
set yy=%dt:~-10,4%
set mm=%dt:~-5,2%
if %mm% == 01 (
 set /a x= %yy%%mm%-89
 ) else (
 set /a x= %yy%%mm%-1
)

REM S3側処理
REM 月次フォルダを作る
set s3=[転送先S3pass]
set fullpath=%s3%%x%/

REM BOXDrive側処理
REM dir設定
set dir=[転送元BOXDrivepass]
set dir=%dir%\%x%

aws s3 cp --recursive --exclude "*" --include "*.csv" %dir% %fullpath% --profile [S3folderのprofile]

コード説明

・日付作成ブロック
 今日の日付からsubstringを駆使してyyyyとmmを作成しており、
 作りたいのは前月のデータなので、monthは-1、
 各年1月の前月は「前年の12月」なので、-89しています。
  例 : 2022年1月の前月値 (2021年12月) を作る場合は、2201-2112 = 89
 こちらを流用させていただきました。ありがとうございます。

・S3側処理ブロック / BOXDrive側処理
 それぞれのパスの一番後ろに前月フォルダ名 (yyyymm) を文字列結合しています。

・S3へコピー
 基本構文はaws s3 cp [転送元ファイル名] [転送先S3バケットパス] [s3のプロファイル名]ですが、
 転送元ファイル名については月によってファイル名が異なるため、ここを可変にするために
 オプションの--recursive --exclude --includeを使用しました。
 オプションの詳細についてはこちら を参照ください。

 この3オプションを利用した理由は [aws s3 cp]の引数にはワイルドカードをそのまま使用できないため になります。
 ※正確にはUNIX スタイルのワイルドカードが使えないです。
  UNIXスタイルのワイルドカードの説明についてはこちらを参照ください。
  用はexcelの置換等でやる[*.csv]の[*]ような形です。

オプションの使い方

複数のオプションを指定する場合は1番最後のオプションが優先になります。
 --recursive : 指定ディレクトリ・プレフィックス内のすべてのファイル・オブジェクトに対して実行指示を出す
 --exclude : 指定パターンに合致するファイル・フォルダを除く
 --include : 指定パターンに合致するファイル・フォルダのみ残す

exclude / includeはワイルドカード使用可です。
image.png

 

注意点

やりながら--includeだけでcsvファイルを選べるのでは?と思ったのですが、
公式によるとデフォルトは「該当フォルダ内のオブジェクトすべて」なので、
特定のものを残したいときは最初に--includeで欲しいオブジェクトを選び、
そのあとに--excludeで最初に選ばれたオブジェクト以外を除かないと思い通りのものが選ばれない状況になります。
また、--includeのみだとエラーが出るらしいです (参考 ポイント2部分)。

エラーで苦労したところ

引数を変数にし、さらにファイル名をワイルドカードにしたかっただけなのですが
フォルダの引数が先なのか、オプションが先なのかが検索しても出てこずエラーと戦いました。。。

いろんな順でやってみましたが、順番はオプション→フォルダ名 でした。
オプションだけでなく転送したいファイルの指定等も後ろに書かれたものから実行なのかもしれません。

おわりに

同じファイル名で上げられれば良かったのですが、その後の処理都合上やりたくなかったのでいろいろチャレンジしました。
参考になれば幸いです。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?