aws s3 cp/mv
コマンド用の便利な関数--no-overwrite
があると便利です。この関数は、ファイルをs3バケットに入れる前に、ターゲットの宛先がまだ存在していないことを確認します。
もちろん、このロジックはAWS API(afaik ...)によって保証できず、競合状態などに対して脆弱です。ただし、意図しないミスを防ぐのに役立ちます。
機能リクエストとしてマークします。 cp
またはmv
で実行した場合の注意点は、CLIがS3にクエリを実行して、ファイルをアップロードする前にファイルが存在するかどうかを確認する必要がある場合があることです。 したがって、すでに追加しているので、 sync
に追加する方が理にかなっている場合があります。
これをcp
および/またはmv
でも見たいです。
現在、これにsync
を使用しない理由は、ターゲットディレクトリの下に宛先バケットに多数の既存のファイルがある場合、 sync
に大きなパフォーマンスの問題があるためです。
aws s3 cp --recursive newdir s3://bucket/parentdir/
を実行すると、実際にコピーしている各ファイルにのみアクセスします。
aws s3 sync newdir s3://bucket/parentdir/
を実行すると、コピーしているファイルにアクセスするだけでなく、 s3://bucket/parentdir
内のファイルのリスト全体(すでに数千または数百万のファイルが含まれている可能性があります)を調べ、既存の各ファイルのメタデータを取得します。
十分に大きい宛先バケットでは、 aws s3 cp --recursive
は数秒かかり、 aws s3 sync
は同じデータをコピーするのに数時間かかる場合があります。
明らかにsync
を修正するのは良いことですが、「ファイルがすでに存在するかどうかを確認する」クエリをcp
に追加する場合は、 sync
コードを次のように修正するよりも扱いにくい問題です。速くするなら、代わりにそれをするのが理にかなっているかもしれません。
この機能にも非常に興味があります。 ファイルを上書きするためのオプションのインタラクティブプロンプトも用意しておくと便利です。
はい@sgrimm-sg、それは理にかなっています。 また、これらの条件を実際に処理できるCLIcpコマンドにも興味があります。
これがaws s3 sync
のオプションであると非常に便利です。 rsync
には、この機能が--ignore-existing
として利用可能です。 rsync
にすでに精通している人がたくさんいると思うので、私の好みはrsync
と同じオプション名を使用することです。
おはようございます!
AWS CLIに関連する機能リクエストのUserVoiceへの移行の一環として、この問題をGitHubでクローズします。
これにより、バグレポートで会話を薄めることなく、最も重要な機能の検索とサポートの表示が簡単になり、最も重要な機能を利用できるようになります。
簡単なUserVoice入門書として(まだなじみがない場合):アイデアが投稿された後、人々はアイデアに投票することができ、製品チームは最も人気のある提案に直接応答します。
GitHubから既存の機能リクエストをインポートしました-この問題をそこで検索してください!
そして心配しないでください、この問題は後世のためにGitHubにまだ存在します。 元の投稿をUserVoiceにテキストのみでインポートするため、GitHubの問題に関してすでにここに存在するコメントとディスカッションを引き続き念頭に置いておく必要があります。
GitHubは、バグを報告するためのチャネルであり続けます。
繰り返しになりますが、この問題は、 https ://aws.uservoice.com/forums/598381-aws-command-line-interfaceでタイトルを検索することで見つけることができます。
-AWS SDK&Toolsチーム
このエントリは、UserVoiceのhttps://aws.uservoice.com/forums/598381-aws-command-line-interface/suggestions/33168406-add-no-overwrite-option-to-aws-s3-にあります。
関連している:
コミュニティのフィードバックに基づいて、機能リクエストをGitHubの問題に返すことにしました。
@jameslsそれは素晴らしいです! 手元の提案に答えていただけますか? --no-overwriteは素晴らしい追加であり、スクリプトで呼び出しをラップすることを回避します
この問題に+1します。 既存のLinuxcpコマンドオプションと一致するように-n、-no-clobberを提案します。
このリクエストの実装はありましたか? Windowsバッチファイルを使用してローカルバックアップ>S3を実行しようとすると、これが最も簡単な方法であり、単純な上書き禁止または同様のフラグです。
この機能に関する更新はありますか?
この機能に関する更新はありますか? ありがとう
この機能に関する更新はありますか?
この機能に関する更新はありますか?
sev3、+ 1
S3同期はすべてのファイルをアップロードするわけではないようであるため、この機能を追加する必要があります。
更新または回避策はありますか?
更新または回避策はありますか?
バケット内のすべてのアイテムを配列(リスト)にロードし、同期するディレクトリからすべてのアイテムをロードし、配列を比較して、S3配列にないローカルアイテムをアップロードするPythonスクリプトを作成する必要がありました。
バケット内のすべてのアイテムを配列(リスト)にロードし、同期するディレクトリからすべてのアイテムをロードし、配列を比較して、S3配列にないローカルアイテムをアップロードするPythonスクリプトを作成する必要がありました。
@southpaw5271-スクリプトを共有して時間を節約してください。 ; )。
バケット内のすべてのアイテムを配列(リスト)にロードし、同期するディレクトリからすべてのアイテムをロードし、配列を比較して、S3配列にないローカルアイテムをアップロードするPythonスクリプトを作成する必要がありました。
@southpaw5271-スクリプトを共有して時間を節約してください。 ; )。
もう持っていないようです:(ごめんなさい!
sync
では宛先名の変更中にファイルをコピーできないため、このフラグはcp
コマンドにも役立ちます。
aws s3 cp --no-overwrite ./somefile s3://bucket/othername
また、s3からlocalへの--no-overwriteオプションも必要です。 私たちは善意のある個人からの偶発的な上書きによって火傷を負いました、そしてこれは彼らのために「ガードレール」を設置するための非常にありがたい方法でしょう。 ありがとう!
すべてのアップデート?
この機能に関する更新はありますか? ありがとう
+1
+1
古いシステムからファイルを移行しています。 私はdb列に従って異なるパスを生成するPythonスクリプトを持っているので(つまり、各組織は特定のバケットに独自のフォルダーを持っています)、syncコマンドに頼ることはできません。 -skip-duplicateまたはある種のパラメーターが使用可能な場合は、スクリプトを実行して部分的な移行を行うことができます。
+1
これはひどく必要です。 なぜまだそこにないのですか?
+1
+10
この機能に関する更新はありますか? ありがとう
また、この機能に投票してください!
+1
+1
+1
+ + 1
これに関する更新はありますか?
+1
それがまだ問題ではないなんて信じられません。 S3で不変のストレージを作成することはほぼ不可能です:(
S3バケットからローカルのLinuxマウントにコピーされたデータを開始しました。宛先のサイズは、S3バケットよりも約40GB小さくなっています。 不足しているものだけをコピーする方法を見つけてください。 すべてをコピーする代わりにそれを行う簡単な方法はないようです。
同様のことを達成する可能性のあるaws s3 sync
の1つのオプションは、 --size-only
ブールフラグです。これは、ソースオブジェクトと宛先オブジェクトの間でサイズが異なる場合にのみ宛先でオーバーライドされます。
--size-only (boolean) Makes the size of each key the only criteria used
to decide whether to sync from source to destination.
私が使用したコマンド、
aws s3 sync s3://<source bucket> s3://<destination bucket> --size-only
_重要_:最初に--dry-run
ブールフラグを指定して上記のコマンドを実行することを強くお勧めします。特に実稼働システムに関係する場合は、実際に実行する前にこのコマンドの目的を確認してください。 これは十分な注意が必要です。
DHが#5456に対応するのを待っているので助けにはなりません
最も参考になるコメント
コミュニティのフィードバックに基づいて、機能リクエストをGitHubの問題に返すことにしました。