S3に置かれているファイルをgrepでフィルターしたいだけ、のような場合に aws s3 cpコマンドでダウンロードしたりする。
このとき作業後にダウンロードしたファイルを削除しなければならずひと手間増える。

S3のファイルをダウンロードするのではなく直接的に標準出力に流せると削除作業が不要になって便利となる。

S3のファイルをcatする方法

aws s3 cp コピー元 コピー先では、コピー元のファイルをコピー先にコピーする。

そこでコピー先の部分を-とするとs3 cpコマンドは標準出力へ流すようになる。

$ aws s3 cp s3://<bucket-name>/<object-key> -

標準出力に流せるので続いてpipeを通じて他のコマンドに流していける。

例えばログファイルの日時指定でフィルターしたい場合は以下のようになる。

$ aws s3 cp s3://<bucket-name>/<object-key> - | grep "2023-03-29 10:00" | less

複数ファイルには対応していない

aws s3 cp helpでマニュアルを確認しても以下のように説明がある。

The following cp command downloads an S3 object locally as a stream to
standard output. Downloading as a stream is not currently compatible
with the --recursive parameter:

   aws s3 cp s3://mybucket/stream.txt -

上記の説明の通りaws-cli/2.9.17では--recursiveオプションを付けると以下のエラーとなる。

Streaming currently is only compatible with non-recursive cp commands

一度に標準出力へ流せるファイルは1つだけとなる。