Answers:
我相信同步是您想要的方法。尝试以下方法:
aws s3 sync ./logdata s3://bucketname/
aws s3 sync ./logdata s3://bucketname/logdata
谢谢带头。--- v
在使用这两个命令时,我都遇到了此错误。
$ aws s3 cp --recursive /local/dir s3://s3bucket/
OR
$ aws s3 sync /local/dir s3://s3bucket/
我什至想到要在本地安装S3存储桶,然后运行rsync,即使失败了(或挂了几个小时),因为我有成千上万个文件。
s3cmd sync /local/dir/ --delete-removed s3://s3bucket/ --exclude="some_file" --exclude="*directory*" --progress --no-preserve
这不仅可以很好地完成工作,并且在控制台上显示出非常详细的输出,还可以部分上传大文件。
以下为我工作:
aws s3 cp ~/this_directory s3://bucketname/this_directory --recursive
然后,AWS将“制作” this_directory
并将所有本地内容复制到其中。
使用以下脚本复制文件夹结构:
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
我无法获得s3 sync
或s3 cp
无法在55 GB的文件夹中工作,其中包含数千个文件和超过2打的子目录。尝试同步整个文件夹只会导致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-
从找到的每个结果的开头删除“ ./”。
另外,您也可以尝试minio client aka mc
$ mc cp Desktop/test/test/test.txt s3/miniocloud/Desktop/test/test/
希望对您有所帮助。
PS:我是该项目的贡献者之一。
(改进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
,...
aws s3 cp --recursive mylocalsrcdir s3://bucket/
将其简单地将文件放在本地存储库中的“根目录”存储桶中aws s3 cp --recursive mydirectory s3://bucket/mydirectory
,则将在目标端重新创建目录结构。