ディレクトリ構造をそのままAWS S3バケットにコピーする


39

AWS S3 CLIを使用して、完全なディレクトリ構造をS3バケットにコピーしたい。

これまでのところ、私が試したすべてがファイルをバケットにコピーしますが、ディレクトリ構造は崩れています。(言い換えると、各ファイルはバケットのルートディレクトリにコピーされます)

私が使用するコマンドは次のとおりです。

aws s3 cp --recursive ./logdata/ s3://bucketname/

また、ソース指定(つまり、引数からのコピー)の末尾のスラッシュを省いてみました。また、ワイルドカードを使用してすべてのファイルを指定しました...私が試みるそれぞれは、単にログファイルをバケットのルートディレクトリにコピーします。


3
はい!それは間違いなく答えです。Unixとは異なり、cpコマンド(およびsyncコマンド)は、要求しない限り、宛先側にターゲットディレクトリを作成しません。したがってaws s3 cp --recursive mylocalsrcdir s3://bucket/、ローカルリポジトリのファイルをバケットの「ルートディレクトリ」に配置するだけです。aws s3 cp --recursive mydirectory s3://bucket/mydirectoryそうすると、ターゲット側でディレクトリ構造が再作成されます。
agentv

回答:


38

同期はあなたが望む方法だと思います。代わりにこれを試してください:

aws s3 sync ./logdata s3://bucketname/

4
...私はそれを試すことに興奮しましたが、cpコマンドと同じ結果が得られました。私の./logfilesディレクトリからのファイルは、バケットのルート「ディレクトリ」にコピーされました。うまくいったことの1つは、これを試してみること aws s3 sync ./logdata s3://bucketname/logdata でした。リードをありがとう。--- v
agentv

残念ながら、あなたの提案agentvを使用しても、同じ結果の同期がディレクトリ構造を保持せず、すべてを平坦化しただけです。
niharvey

UPDATE * -用事私のディレクトリ構造が抽出上で台無ししまった
niharvey

9

私は直面していた これらのコマンドのいずれかを使用ときに、このエラーに。

$ aws s3 cp --recursive /local/dir s3://s3bucket/
OR
$ aws s3 sync /local/dir s3://s3bucket/

S3バケットをローカルにマウントしてからrsyncを実行することさえ考えましたが、それでも数千のファイルがあるために失敗しました(または数時間ハングしました)。

最後に、s3cmdは魅力のようました。

s3cmd sync /local/dir/ --delete-removed s3://s3bucket/ --exclude="some_file" --exclude="*directory*"  --progress --no-preserve

これにより、ジョブが適切に実行され、コンソールに非常に詳細な出力が表示されるだけでなく、大きなファイルが部分的にアップロードされます。


1
tl; dr:ワイルドカードファイルのグロビングは、私にとってs3cmdでうまく機能しました。aws-cliと同じくらいかっこいい-一度だけのS3ファイル操作の問題で、期待したとおりにすぐに機能せず、思ったように動作しなかった-私はs3cmdをインストールして使用しました。構想が構想した構文や舞台裏での動作が何であれ、s3cmdはより直感的であり、私の先入観に焼き付いていました。多分それはあなたがここに来た答えではないかもしれませんが、それは私のために働いた。
-BradChesney79

これは便利です@ BradChesney79
agentv

syncコマンドで使用しているオプションを説明するとよいでしょう。また、s3cmd用の「cp」コマンドはありませんか?cpの代わりにsyncを使用する理由
ヴィンガルシア

4

次は私のために働いた:

aws s3 cp ~/this_directory s3://bucketname/this_directory --recursive

その後、AWSはthis_directoryすべてのローカルコンテンツを「作成」してコピーします。


2

フォルダ構造をコピーするには、次のスクリプトを使用します。

s3Folder="s3://xyz.abc.com/asdf";

for entry in "$asset_directory"*
do
    echo "Processing - $entry"
    if [[ -d  $entry ]]; then
        echo "directory"
        aws s3 cp  --recursive "./$entry" "$s3Folder/$entry/"
    else
        echo "file"
        aws s3 cp "./$entry" "$s3Folder/"
    fi
done

2

私は得ることができませんでしたs3 syncs3 cp数千のファイルと2ダース以上のサブディレクトリを含む55 GBのフォルダーをことも作業する。フォルダー全体を同期しようとすると、バケットに何もアップロードせずにawscliがサイレントに失敗するだけです。

すべてのサブディレクトリとそのコンテンツを最初に同期するためにこれを行うことになりました(フォルダ構造は保持されます):

nice find . -mindepth 1 -maxdepth 1 -type d | cut -c 3- | while read line; do aws s3 sync $"$line" "s3://bucketname/$line"; done

次に、これを実行して、最上位の30,000個のファイルを取得しました。

nice find . -mindepth 1 -maxdepth 1 -type f | cut -c 3- | while read line; do aws s3 cp "$line" "s3://bucketname/";

サーバーの負荷を確認し(負荷をw表示するために使用できるヒント)、ctrl-z負荷が高くなりすぎた場合はコマンドを中断してください。(fg再度続行します)。

同様の状況にある人を助けるために、ここにこれを置きます。

ノート:

-mindepth 1 除外する .

-maxdepth 1サブディレクトリのコンテンツをs3 sync正常に処理するため、findがサブディレクトリのコンテンツを一覧表示できないようにします。

cut -c 3- findの各結果の先頭から「./」を削除します。


1

または、minio client aka mcを試すこともできます

$ mc cp Desktop/test/test/test.txt s3/miniocloud/Desktop/test/test/

お役に立てば幸いです。

PS:私はプロジェクトの貢献者の一人です。


1
クレジットが支払われるクレジット:mcがジョブを実行し、ディレクトリ構造を保存しました-すばらしい!私はすでにawscliを使用するために200メガバイトを超えるPython&Pipクラップスをインストールし、dir構造が崩壊することをここで読むことに
腹を立てていました。– joonas.fi

0

Shishirのソリューションの改善)

  • 次のスクリプトをファイルに保存します(ファイルに名前を付けましたs3Copy.sh
path=$1 # the path of the directory where the files and directories that need to be copied are located
s3Dir=$2 # the s3 bucket path

for entry in "$path"/*; do
    name=`echo $entry | sed 's/.*\///'`  # getting the name of the file or directory
    if [[ -d  $entry ]]; then  # if it is a directory
        aws s3 cp  --recursive "$name" "$s3Dir/$name/"
    else  # if it is a file
        aws s3 cp "$name" "$s3Dir/"
    fi
done
  • 次のように実行します。
    /PATH/TO/s3Copy.sh /PATH/TO/ROOT/DIR/OF/SOURCE/FILESandDIRS PATH/OF/S3/BUCKET
    たとえばs3Copy.sh、がホームディレクトリに格納されていて、現在のディレクトリにあるすべてのファイルとディレクトリをコピーする場合、これを実行します。
    ~/s3Copy.sh . s3://XXX/myBucket

あなたは簡単に他の引数を可能にするためのスクリプトを修正することができるs3 cpなど--include--exclude...


すごい。実際、職人技。
agentv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.