AWS S3 버킷에 그대로 디렉토리 구조 복사


37

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

답변:


36

동기화가 원하는 방법이라고 생각합니다. 대신 이것을 시도하십시오 :

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

4
... 그것을 시도하게되어 기뻤지 만 cp 명령과 동일한 결과를 얻었습니다. 내 ./logfiles 디렉토리의 파일이 버킷의 루트 "디렉토리"로 복사되었습니다. 그래도 효과가 있었던 것은 시도해 보는 것이 었 aws s3 sync ./logdata s3://bucketname/logdata 습니다. 리드 주셔서 감사합니다. --- v
agentv

불행히도, 당신의 제안 에이전트 v조차도 동일한 결과 동기화가 디렉토리 구조를 보존하지 않고 모든 것을 평평하게 만들었습니다.
niharvey 2014

업데이트 *-내 디렉토리 구조가 추출에서 엉망이 된 것을
신경 쓰지 마십시오.

8

내가 직면했던 다음 명령 중 하나를 사용하는 동안 오류가 발생했습니다.

$ 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를 사용합니까?
VinGarcia

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

수천 개의 파일과 20 개가 넘는 하위 디렉토리가있는 55GB 폴더를 가져 s3 sync오거나 s3 cp작업 할 수 없었습니다 . 전체 폴더를 동기화하려고하면 버킷에 아무것도 업로드하지 않고 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성공적으로 처리 하므로 찾기가 하위 디렉토리의 컨텐츠를 나열하지 못하게 합니다.

cut -c 3- find에서 각 결과의 시작 부분에서 "./"를 제거합니다.


1

또는 minio client aka mc을 사용해보십시오.

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

도움이 되길 바랍니다.

추신 : 저는이 프로젝트의 공헌자 중 하나입니다.


1
신용이 필요한 신용 : mc가 작업을 수행하고 디렉토리 구조를 보존했습니다. awscli를 사용하기 위해 200MB가 넘는 Python & Pip crap을 설치하고 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.