当我们使用命令行批量从 S3 上拷贝文件或统计文件数量时,希望能排除掉 S3 上以 _$folder$
结尾的占位文件,这个正则表达式应该怎么写呢?
以下是统计 S3 某个位置下的除 _$folder$
结尾的文件的文件数量:
aws s3 ls --recursive s3://my-s3-location/ | grep -v '.*_\$folder\$' | wc -l
使用 grep 过滤是比较简单的,因为 grep 有一个 -v,--invert-match
参数:“反向匹配”,即:过滤掉match 上的行。
相较而言,如果是 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