检查文件是否存在于 S3 存储桶中

Pat*_* B. 9 bash files amazon-s3 amazon aws

该目录/data/files/有数千个文件,例如:

1test
2test
3test

[...]

60000test
60001test
Run Code Online (Sandbox Code Playgroud)

我还将它们发送到 S3 存储桶 (AWS),使用AWS CLI. 但是,有时 S3 存储桶可能处于脱机状态,因此会跳过该文件。

如何检查存在的文件/data/files/是否也在 S3 存储桶中?如果没有将丢失的文件复制到 S3?

我更愿意使用 BASH 来做到这一点。此外,如果我需要为另一个更改 AWS CLI,也可以。

小智 15

如果您aws s3 ls对实际文件名进行操作。如果文件名存在,退出码为0并显示文件名,否则退出码不为0:

aws s3 ls s3://bucket/filname
if [[ $? -ne 0 ]]; then
  echo "File does not exist"
fi
Run Code Online (Sandbox Code Playgroud)

  • 问题在于,即使您提供了部分路径,`s3 ls` 也会列出文件并返回 0(成功)的返回码。例如,`aws s3 ls s3://bucket/filen` 将列出文件 `s3://bucket/filename`。 (3认同)

Pat*_* B. 0

我能够rclone按照 @derobert 的建议使用 [1] 来做到这一点。

命令非常简单:

rclone check sourcepath remote:s3bucketname
Run Code Online (Sandbox Code Playgroud)

例子:

假设您要检查 S3 存储桶(存储桶名称:tmp_data_test_bucket)是否包含该目录中的所有文件:/tmp/data/

命令:

rclone check /tmp/data/ remote:tmp_data_test_bucket
Run Code Online (Sandbox Code Playgroud)

[1] http://rclone.org/