正则表达式:过滤 S3 上以 _$folder$ 结尾的占位文件

2023-12-26 11:44:08

当我们使用命令行批量从 S3 上拷贝文件或统计文件数量时,希望能排除掉 S3 上以 _$folder$ 结尾的占位文件,这个正则表达式应该怎么写呢?

Shell 实现

以下是统计 S3 某个位置下的除 _$folder$ 结尾的文件的文件数量:

aws s3 ls --recursive s3://my-s3-location/ | grep -v '.*_\$folder\$' | wc -l

使用 grep 过滤是比较简单的,因为 grep 有一个 -v,--invert-match 参数:“反向匹配”,即:过滤掉match 上的行。

Java 实现

相较而言,如果是 java 程序,这个正则就很有些难写了,应为 java 正则接口并没有“反向匹配”这种设置,这个 正则要这样写:^(?!.*[_]\$folder\$$).*$,我们以 s3-dist-cp 这个命令为例,它的 --srcPattern 参数就是一个 Java 的正则表达式,用于匹配需要拷贝的文件,如果我们要在拷贝时排除掉 S3 上那些恼人的 _$folder$ 结尾的文件,应该这样写:

nohup s3-dist-cp \
    -Dmapreduce.job.reduces=599 \
    --src=s3://my-hbase-snapshots/usertable-20231205 \
    --dest=hdfs://${SINK_CLUSTER_NAMENODES}:8020/user/hbase/ \
    --srcPattern='^(?!.*[_]\$folder\$$).*$' \
    --multipartUploadChunkSize=1024 &> s3-dist-cp.out &
tail -f s3-dist-cp.out

文章来源:https://blog.csdn.net/bluishglc/article/details/135189972
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。