如何比较Amazon S3对象的版本?

Fre*_*ert 6 compare version amazon-s3 amazon-web-services

Amazon S3存储桶的版本控制很不错,但我没有看到任何简单的方法来比较文件的版本 - 通过控制台或我找到的任何其他应用程序.

S3Browser似乎有最好的版本支持,但没有比较.

有没有办法比较S3上的文件版本而不下载两个版本并手动比较它们?

-

编辑:我刚开始认为一些基本的自动化不应该太难,请参阅下面的代码片段.问题仍然存在:是否有任何工具可以正确支持?这个脚本对我来说可能没问题,但对于非开发用户则不行.

#!/bin/bash

# s3-compare-last-versions.sh

if [[ $# -ne 2 ]]; then
    echo "Usage: `basename $0` <bucketName> <fileKey> "
    exit 1
fi

bucketName=$1
fileKey=$2

latestVersionId=$(aws s3api list-object-versions --bucket $bucketName --prefix $fileKey --max-items 2 | json Versions[0].VersionId)
previousVersionId=$(aws s3api list-object-versions --bucket $bucketName --prefix $fileKey --max-items 2 | json Versions[1].VersionId)

aws s3api get-object --bucket $bucketName --key $fileKey --version-id $latestVersionId $latestVersionId".js"
aws s3api get-object --bucket $bucketName --key $fileKey --version-id $previousVersionId $previousVersionId".js"

diff $latestVersionId".js" $previousVersionId".js"
Run Code Online (Sandbox Code Playgroud)

Moh*_*lah 8

我编写了一个 bash 脚本来下载对象的最后两个版本并使用 colordiff 进行比较。我写完后偶然发现了这个问题。我想如果有人想使用它我可以在这里分享它。

#!/bin/bash

#This script needs awscli, jq and colordiff. Please install them for your environment

#This script also needs the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_DEFAULT_REGION.

#Please set them using the export command as follows or set them using envrc
#export AWS_ACCESS_KEY_ID=<Your AWS Access Key ID>
#export AWS_SECRET_ACCESS_KEY=<Your AWS Secret Access Key>
#export AWS_DEFAULT_REGION=<Your AWS Default Region>

set -e

if [ -z $1 ] || [ -z $2 ]; then
echo "Usage:"
echo "version_compare.sh *bucket_name* *file_name*"
echo
echo "Example"
echo "version_compare.sh bucket_name folder/filename.extension"
echo
exit 1;
fi


aws_bucket=$1
file_key=$2

echo Getting the last 2 versions of the file at ${file_key}..

echo
echo Executing:
cat << EOF
aws s3api list-object-versions --bucket ${aws_bucket} --prefix ${file_key} --max-items 2
EOF
echo
versions=$(aws s3api list-object-versions --bucket ${aws_bucket} --prefix ${file_key} --max-items 2)
version_1=$( jq -r '.["Versions"][0]["VersionId"]' <<< "${versions}" )
version_2=$( jq -r '.["Versions"][1]["VersionId"]' <<< "${versions}" )

mkdir -p state_comparison_files

echo Getting the latest version ${version_1} of the file at ${file_key}..
echo
echo Executing:
cat << EOF
aws s3api get-object --bucket ${aws_bucket} --key ${file_key} --version-id ${version_1} state_comparison_files/${version_1}
EOF
aws s3api get-object --bucket ${aws_bucket} --key ${file_key} --version-id ${version_1} state_comparison_files/${version_1} > /dev/null

echo
echo Getting older version ${version_2} of the file at ${file_key}..
echo
echo Executing:
cat << EOF
aws s3api get-object --bucket ${aws_bucket} --key ${file_key} --version-id ${version_2} state_comparison_files/${version_2}
EOF
aws s3api get-object --bucket ${aws_bucket} --key ${file_key} --version-id ${version_2} state_comparison_files/${version_2} > /dev/null

echo
echo Comparing the different versions.
echo If no differences are found, nothing will be shown
colordiff --unified state_comparison_files/${version_2} state_comparison_files/${version_1}
Run Code Online (Sandbox Code Playgroud)

这是它的链接

https://gist.github.com/mohamednajiullah/3edc88d314291be40f2dd3cf13ea0d7f

注意:它与提问者自己创建的脚本几乎相同,只是它使用 jq 进行 json 解析,并使用 colordiff 来显示不同颜色的差异,如 git diff 中。

我正在创建一个基于 electro.js 的桌面应用程序来完成此任务。目前正在开发中,但可以使用。我欢迎贡献

https://github.com/mohamednajiullah/s3_object_version_comparator


Mar*_*k B 5

您根本无法通过 S3 查看文件内容,因此您绝对无法通过 S3 比较文件的内容。您必须下载不同的版本,然后使用类似的工具diff来比较它们。