2017年2月28日火曜日

AWS S3のCLIの落とし穴 「空ディレクトリ」

s3のCLIは非常に便利ですが、見落としがちな仕様があります。

「空ディレクトリは無視される」

linuxコマンドのような、cp, mv, sync などが用意されていますが、どのコマンドも空ディレクトリはスルーされます。
「--recursive」を使って丸ごとコピーしたくても、空ディレクトリはコピーされない点が非常に面倒です。

厳密には、s3のデータベース上で、値が空のデータですね。

また、mvはcpのエイリアスでしかなく、mv元は消えません。
ファイルパス/ディレクトリ/ファイル名の変更はできないので、コピーして削除と2回実行しないといけません。

s3はただのkey-value式データベースでしかく、ファイルパスがkeyとなっています。
ファイルシステムの常識は通用しないので注意が必要ですね。

ちなみに私のプロジェクトでは、空ディレクトリになる場合があるディレクトリにはダミーファイル。
もしくは、ディレクトリが無い場合は自動作成するロジックで対応させています。