aws s3 syncは、-deleteまたは--recursive引数を指定して使用しても、S3フォルダー構造をローカルで完全に同期しません。
aws --version
aws-cli / 1.4.3 Python / 2.7.6 Linux /3.13.0-35-ジェネリック
$ aws s3 ls s3://s3.testbucket
$ aws s3 ls s3://s3.testbucket/
$ mkdir s3.testfolder
$ mkdir s3.testfolder / test1
$ aws s3 sync ./s3.testfolder s3://s3.testbucket/
$ aws s3 ls s3://s3.testbucket/
$ touch s3.testfolder / test1 / 1
$ aws s3 sync ./s3.testfolder/ s3://s3.testbucket/
アップロード:s3.testfolder / test1 / 1からs3://s3.testbucket/test1/1
$ aws s3 sync ./s3.testfolder s3://s3.testbucket/
$ mkdir ./s3.testfolder/test-to-delete
$ aws s3 sync s3://s3.testbucket/ ./s3.testfolder/ --delete --recursive
$ aws s3 sync s3://s3.testbucket/ ./s3.testfolder/ --delete
$ ls -lah ./s3.testfolder/
合計60K
drwxrwxr-x 4 tobi tobi 4.0K szept 1215:24。
drwx ------ 71 tobi tobi 44K szept 12 15:22 ..
drwxrwxr-x 2 tobi tobi 4.0K szept 12 15:23 test1
drwxrwxr-x 2 tobi tobi 4.0K szept 12 15:24 test-to-delete
$ aws s3 ls s3://s3.testbucket/
PREテスト1 /
この動作は既知です。 sync
コマンドがこのように動作する理由は、s3が物理的にディレクトリを使用しないためです。 バケットとオブジェクトのみがあります。 オブジェクトにはディレクトリのように機能するプレフィックスがありますが、s3は特定の物理オブジェクトをディレクトリとして指定しません。
したがって、同期が発生すると、s3には物理ディレクトリがないため、ファイルのみがs3に転送されます。 したがって、空のディレクトリを同期しようとすると、ファイルがないため、何もアップロードされません。 ディレクトリにアイテムを配置すると、ファイル(ディレクトリを表すプレフィックス付き)がアップロードされます。
カイルありがとう、それは明らかです。 S3がファイルを保存する方法は知っていますが、空のファイルがある場合でも、複数の場所に同じディレクトリ構造が必要な場合や、不要になった場合は削除する場合があります。
S3に同期したよりもローカルに多くのコンテンツを含む複雑なディレクトリ構造がある場合の良い例です。 その後、自動化されたメカニズムがこの構造をいくつかの実行中のインスタンスに定期的に同期します。 S3のほとんどのコンテンツを最新の状態に保つ(削除する)と、自動化によって以前に使用した場所に再同期されます。 残念ながら、元の複雑なディレクトリ構造が同期ターゲットに永久に残ることがわかります。これを確認したり、プログラムがこの空のフォルダを使用しようとしたりすると、どこでも常に同じである必要があるため、混乱が生じる可能性があります。 さらに、-deleteオプションを指定して使用する人は、以前はLinuxで同等の「rsync」を使用していた可能性があります。これにより、フォルダーの同期が維持されるため、同じ操作が重要になります。
S3オブジェクトがファイルまたはフォルダー(リスト、サイズなど)であるかどうかを何らかの方法で検出し、ローカルまたはS3バケット(例: list(bucket.list( ""、 "/"))?
それは理にかなっている。 そのための機能を追加することを検討します。
これは私たちの状況にも非常に役立ちます。 オプション(--sync-empty-directories)として追加された場合、人々は必要なときにそれを使用することを選択できます。
+1この機能が非常に必要
+1。 使いたいです。
+1
また、「同期」と呼ばれるこの動作にも驚いていました。
私の特定のユースケースではこれを回避できますが、将来のユーザーは苦痛を免れることができます:)
ディレクトリ構造を同期できるようになると+1! フォルダを削除すると、コンテンツのみが削除されますが、フォルダは残ります...
+1。 私にも同じニーズがあります。
+ 1-まだ実装されていないことに驚いています。 確かに、私の場合はそれほど重要ではなく、回避することもできます(または、構造を作成するときにプレースホルダーファイルを使用するだけです)が、s3syncまたはs3cpのいずれかでサポートするだけでよいのです。
+1
s3cmd sync
はフォルダ構造を保持しますが、同期中にアクセスを許可するときにいくつかの問題があるため、後で別のs3cmd setacl --recursive
を実行する必要があります…
+1
+1
+1
皆様からのフィードバックに感謝します。 私が見た中で最良のオプションは、 --sync-empty-directories
オプションを追加することだと思います。 それをしましょう。
@jamesls rsync機能のようなものを期待していますが、オブジェクトストレージとしてのs3は間違いなく同じではありません。
+1
+1
この機能のタイムラインはありますか?
一時的な回避策として、空の.s3keepファイルを空のディレクトリに追加しました。これでうまくいきます。 これは私が通常gitをだまして空のディレクトリを空のディレクトリとして扱わないようにするために使用するハックです:)
これにより、S3の空のディレクトリを「削除/削除」することもできますか?
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
_s3へのデータ移行中に多くの意味を持ちます。_
+1
+1これで壊された... Arg...。
+1
+10
ダミーファイルでこれを回避することは可能ですが、空のプレフィックスを強制的に同期させるオプションがあると、よりクリーンになります。
+1。 ユースケース:svnリポジトリのバックアップ。
より一般的には:
aws s3syncthing
aws s3 sync
私はthing_copyがthingと完全に一致することを期待していました。
+1
+1
+1
+1は空のディレクトリを削除する必要があります
このオプション--sync-empty-directories
の追加の進捗状況はどうですか?
AWSチームからのフィードバックはありますか?
ありがとう。
+1は、非常に便利なツールにとって非常に便利な機能です。
+1
+1(この機能が実装され、Github.comに問題/機能に「投票」するためのStackOverflow.comのようなインターフェイスがあることを願っています)。
+1
+1
+1
+1
+1
2年以上経ってもまだ起こっていない..? それは今までにありますか? = /
+1
+1
+1
+1
+1000
+1
これをどのように実装できるかについて掘り下げました。 すべてのs3コマンドは、最終的にs3transferライブラリのTransferManager
を使用することになります。 (ここで参照)
PutObjectを使用したフォルダーの追加をサポートするために、Bodyパラメーターで空の文字列を送信できます。 しかし、これが公式にサポートされているかどうかはわかりません。 私はこれをここに実装しました:
https://github.com/svleeuwen/s3transfer/commit/b7d3745a995a75c5262950bb798c8c57e481c2b3
続行する前に、メンテナからこれに関するフィードバックをお願いします。
+1
私の解決策は、s3fsとrsyncを使用してバケットをs3マウントからホームディレクトリのディレクトリにマウントすることでした。
+1
+1は本当にこれが必要です...
+1
2014年からオープンしていますか? 本当に? :面白くない:
+1
+1
+1
+1
+1
+1
+1
+1
+1
@thenetimpこのソリューションは、小さなバケットに適しています。 15TB以上のバケットを使用しています。 S3FSは、バケットが大きくなるとひどく遅くなります。
+1
おはよう!
AWS CLIに関連する機能リクエストのUserVoiceへの移行の一環として、この問題をGitHubでクローズします。
これにより、バグレポートで会話を薄めることなく、最も関心のある機能の検索とサポートの表示が簡単になり、最も重要な機能を取得できるようになります。
簡単なUserVoice入門書として(まだなじみがない場合):アイデアが投稿された後、人々はアイデアに投票することができ、製品チームは最も人気のある提案に直接応答します。
GitHubから既存の機能リクエストをインポートしました-この問題をそこで検索してください!
そして心配しないでください、この問題は後世のためにGitHubにまだ存在します。 元の投稿をUserVoiceにテキストのみでインポートするため、GitHubの問題に関してすでにここに存在するコメントとディスカッションを引き続き念頭に置いておく必要があります。
GitHubは、バグを報告するためのチャネルであり続けます。
-AWS SDK&Toolsチーム
このエントリは、UserVoiceのhttps://aws.uservoice.com/forums/598381-aws-command-line-interface/suggestions/33168436-aws-s3-sync-does-not-synchronize-s3-にあります。 folder-structu
アンドレ、お疲れ様でした。問題を閉じて、問題に関係のないリンクを教えてください。 すべての役に立たない投稿の
一般的な定型文は残念です。 機能リクエストとバグレポートの境界線はかなりぼやけていると思います。 ユーザーを節約するために、この機能リクエストのUserVoice投稿を検索する人は、 https://aws.uservoice.com/forums/598381-aws-command-line-interface/suggestions/33168436-aws-s3-sync-does-notで入手でき
コミュニティのフィードバックに基づいて、機能リクエストをGitHubの問題に返すことにしました。
+1
+1
+1
+1
+1
+1
+1。 追加するのに良い機能になるでしょう。
+1
+1
同じ問題
awscli == 1.16.74
+1
-1
aws s3 syncコマンドはすでに再帰的であるため、再帰的オプションは必要ありません。さらに、syncコマンドは、宛先にまだ存在しないもののみをコピーします。 フォルダをポイントすると、ターゲットの宛先にまだ存在していない内部のすべてが再帰的に同期されます。 これは、aws s3cpコマンドとは異なります。 cpコマンドは、ターゲットにすでに存在しているかどうかに関係なく、指示した内容をコピーします。 cp / mv / rbコマンドは、フォルダー/ファイルを再帰的にコピー/移動/削除するための--recursiveオプションを取ります。 ありがとう
@ 3ggauravの問題は、元々2014年にsync
--recursive
オプションがあったことを思い出したときのものです。
さらに、スタックオーバーフローの回答を逐語的に引用する場合は、一般的に、それを参照/クレジットすることをお勧めします。
これについてはまだ進展がありませんか?
+1
最も参考になるコメント
コミュニティのフィードバックに基づいて、機能リクエストをGitHubの問題に返すことにしました。