30

s3 にコピーしたいファイルがいくつかあります。ファイルごとに 1 回の呼び出しを行うのではなく、それらすべてを 1 回の呼び出しに含めたい (できるだけ効率的にするため)。

ただし、 --recursive フラグを追加した場合にのみ機能するようです。これにより、すべての子ディレクトリで表示されます(必要なすべてのファイルは現在のディレクトリのみにあります)。

これは私が今持っているコマンドです、それはうまくいきます

aws s3 cp --dryrun . mybucket --recursive --exclude * --include *.jpg

しかし、理想的には、 --recursive を削除してトラバースを停止したいと思います。たとえば、次のようなものです (これは機能しません)。

aws s3 cp --dryrun . mybucket --exclude * --include *.jpg

(例を単純化しました。私のスクリプトには、いくつかの異なるインクルード パターンがあります)

4

4 に答える 4

48

AWS CLI の S3 ワイルドカード サポートは少し原始的ですが、複数の--excludeオプションを使用してこれを実現できます。注: と の順序includesexcludes重要です。

aws s3 cp --dryrun . s3://mybucket --recursive --exclude "*" --include "*.jpg" --exclude "*/*"
于 2014-10-16T04:38:49.737 に答える
2

提案された回答を試してみましたが、ネストされたフォルダーをスキップするように aws を取得できませんでした。除外フラグを使用しているにもかかわらず、サイズの計算と 0 サイズのオブジェクトに関する奇妙な出力がいくつか見られました。

最終的にフラグをあきらめ、--recursivebash を使用して、一致したファイルごとに 1 つの s3 アップロードを実行しました。ロールする準備ができたら、取り外し--dryrunてください。

for i in *.{jpg,jpeg}; do aws --dryrun s3 cp ${i} s3://your-bucket/your-folder/${i}; done
于 2017-07-29T01:02:05.617 に答える
1

unix のようなファイル システム操作を提供し、ワイルド カードhttps://github.com/bloomreach/s4cmdを含めることもできる s4cmd というユーティリティを使用することをお勧めします 。

于 2014-10-21T11:18:17.250 に答える