我正在尝试使用aws s3 sync
它将一堆备份文件从我的 Windows 服务器推送到 s3 存储桶。我遇到的问题是它似乎正在获取回收站和系统卷信息。不幸的是,它无法遍历这些目录,因此最终命令以非零状态退出。
以下是我在命令行中尝试的内容:
aws s3 sync X:\Backup\ s3://«my bucket name» --exclude '*\$RECYCLE.BIN\*' --exclude "System Volume Information\*" --exclude '*.trn' --include '*.bak'
我尝试了该--exclude
参数的几种变化但都无济于事。
答案1
假设您已进入 DOS shell 来运行该命令,单引号不会被识别为参数包装器。使用双引号对我来说是可行的。
aws --profile MyProfile s3 sync X:\ s3://some-bucket/data/ --exclude "*\$RECYCLE.BIN\*" --exclude "*\System Volume Information\*"
答案2
因此,对于那些仍在为此苦苦挣扎的人,这里有一个部分解决方案/解释,可能有助于您使脚本正常运行。如果 AWS Sync 无权读取该文件夹,则它似乎不会排除该文件夹,例如 System Volume Information 文件夹的情况。使其正常工作的最简单方法是授予脚本运行程序对相关文件夹的访问权限,然后 --exclude 命令应该可以正常工作。如果这还不够令人震惊,一个失败的 --exclude 命令将导致所有后续(甚至可能是前面的)排除命令失败。例如,如果您尝试这样做:
aws sync $path $bucket --exclude "$path*System Volume 系统卷信息*" --exclude '*.trn'
但是您的用户无权访问 sys vol 路径,它甚至懒得评估 *.trn。因此,我认为有两种可能的解决方案,一种是授予您的用户帐户访问问题文件夹的权限。第二种是将您的根目录扫描到数组中,并在数组变量级别消除那些不需要的文件夹,然后对每个循环进行同步其余文件夹。虽然很麻烦,但它可以完成工作,而无需在代码中手动声明每个文件夹。
希望有所帮助。