Google 存储 Rsync 排除
Google Storage Rsync Exclusion
我正在尝试使用 gcloud rsync 实用程序仅同步与特定日期字符串匹配的文件,例如:2015 年 9 月 14 日
文件结构如下:bucket/123/CODE_14-Sep-2015.txt
所以当我rsync时我只想同步匹配特定日期的文件。这是因为我们偶尔会从本地系统中删除旧文件并且不想继续 rsync 那些旧文件。
这是我正在尝试的:
gsutil -m rsync -n -x '[0-9]+/[A-Za-z0-9]+_((?!15-Aug-2015).*)' -r gs://bucket folder;
当我在测试环境中测试正则表达式时,它似乎工作正常,但它仍在提取与该日期不匹配的其他文件。
知道为什么这没有按预期工作吗?有没有比 rsync 更好的方法来实现这一点?
使用 (?!15-Aug-2015)
正则表达式将匹配每个日期,不包括 15-Aug-2015。如果你想匹配特定日期的文件,最好使用积极的前瞻,比如:
[0-9]+/[A-Za-z0-9]+_((?=14-Sep-2015)).*
但是如果它是关于排除的,也许你应该在 (?!15-Aug-2015)
之后添加所需的格式,如果没有它,它会匹配每个匹配 [0-9]+/[A-Za-z0-9]+_
的文件,但后面没有被排除的部分(demo for invalid match examples).为避免这种情况,请尝试:
[0-9]+/[A-Za-z0-9]+_((?!15-Sep-2015))\d{2}-[A-Za-z]{3}-\d{4}
我的正则表达式是正确的,但由于某种原因不适用于我的 python/gsutil 版本。不过,我找到了一种更简单的方法来达到预期的效果。
简单地使用复制:
gsutil cp -r gs://bucket_name/*/*15-Sep-2015.txt destination_folder
它只是使用通配符,不需要正则表达式。
注意:cp好像不像rsync那样复制目录结构,例如...
gs://bucket/123/file.txt 被复制到 /destination_folder/file.txt 而不是 /destination_folder/123/file.txt
更新:
所以复制功能按照记录工作,不幸的是对我来说似乎有点违反直觉,但我找到了使用 rsync 的工作解决方案。
我有一个不匹配的额外目录层,所以它破坏了我的整个正则表达式。因此值得注意的是,您必须匹配存储桶名称后的整个路径才能使正则表达式正常工作。
有效答案:
gsutil -m rsync -n -x '[0-9]+/[A-Za-z0-9]+_((?!15-Aug-2015).*)' -r gs://bucket/subfolder folder;
我正在尝试使用 gcloud rsync 实用程序仅同步与特定日期字符串匹配的文件,例如:2015 年 9 月 14 日
文件结构如下:bucket/123/CODE_14-Sep-2015.txt
所以当我rsync时我只想同步匹配特定日期的文件。这是因为我们偶尔会从本地系统中删除旧文件并且不想继续 rsync 那些旧文件。
这是我正在尝试的:
gsutil -m rsync -n -x '[0-9]+/[A-Za-z0-9]+_((?!15-Aug-2015).*)' -r gs://bucket folder;
当我在测试环境中测试正则表达式时,它似乎工作正常,但它仍在提取与该日期不匹配的其他文件。
知道为什么这没有按预期工作吗?有没有比 rsync 更好的方法来实现这一点?
使用 (?!15-Aug-2015)
正则表达式将匹配每个日期,不包括 15-Aug-2015。如果你想匹配特定日期的文件,最好使用积极的前瞻,比如:
[0-9]+/[A-Za-z0-9]+_((?=14-Sep-2015)).*
但是如果它是关于排除的,也许你应该在 (?!15-Aug-2015)
之后添加所需的格式,如果没有它,它会匹配每个匹配 [0-9]+/[A-Za-z0-9]+_
的文件,但后面没有被排除的部分(demo for invalid match examples).为避免这种情况,请尝试:
[0-9]+/[A-Za-z0-9]+_((?!15-Sep-2015))\d{2}-[A-Za-z]{3}-\d{4}
我的正则表达式是正确的,但由于某种原因不适用于我的 python/gsutil 版本。不过,我找到了一种更简单的方法来达到预期的效果。
简单地使用复制:
gsutil cp -r gs://bucket_name/*/*15-Sep-2015.txt destination_folder
它只是使用通配符,不需要正则表达式。
注意:cp好像不像rsync那样复制目录结构,例如...
gs://bucket/123/file.txt 被复制到 /destination_folder/file.txt 而不是 /destination_folder/123/file.txt
更新:
所以复制功能按照记录工作,不幸的是对我来说似乎有点违反直觉,但我找到了使用 rsync 的工作解决方案。
我有一个不匹配的额外目录层,所以它破坏了我的整个正则表达式。因此值得注意的是,您必须匹配存储桶名称后的整个路径才能使正则表达式正常工作。
有效答案:
gsutil -m rsync -n -x '[0-9]+/[A-Za-z0-9]+_((?!15-Aug-2015).*)' -r gs://bucket/subfolder folder;