暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用s3cmd遇到的删除问题,值得反思

TiDB之路 2022-03-31
2314

前言

今天测试COS的时候,遇到了一个删除的小问题,也没查资料,就硬着头皮干,走了不少弯路,这里记录一下。

不能删除的问题

如下所示,我列出了4个文件夹。都是2022-03-30产生的。

[root@copy-of-vm-ee-centos76-v1 bin]# s3cmd ls s3://tidbtest-1304250695                          DIR  s3://tidbtest-1304250695/202203302226/                          DIR  s3://tidbtest-1304250695/202203302237/                          DIR  s3://tidbtest-1304250695/202203302238/                          DIR  s3://tidbtest-1304250695/202203302239/                          DIR  s3://tidbtest-1304250695/backup
复制

通过通配符可以查询。

[root@copy-of-vm-ee-centos76-v1 bin]# s3cmd ls s3://tidbtest-1304250695/20220330*                          DIR  s3://tidbtest-1304250695/202203302226/                          DIR  s3://tidbtest-1304250695/202203302237/                          DIR  s3://tidbtest-1304250695/202203302238/                          DIR  s3://tidbtest-1304250695/202203302239/
复制

现在想要通过通配符*进行删除,竟然是不能删。

[root@copy-of-vm-ee-centos76-v1 bin]# s3cmd del s3://tidbtest-1304250695/20220330*[root@copy-of-vm-ee-centos76-v1 bin]# [root@copy-of-vm-ee-centos76-v1 bin]# s3cmd ls s3://tidbtest-1304250695/20220330*                          DIR  s3://tidbtest-1304250695/202203302226/                          DIR  s3://tidbtest-1304250695/202203302237/                          DIR  s3://tidbtest-1304250695/202203302238/                          DIR  s3://tidbtest-1304250695/202203302239/
复制

难道只能一个一个的删,如果一天有一堆文件夹那岂不是要疯掉。这期间还有其他的事情。我就要同事帮我查一下,它丢了一个awk的脚本过来。我也没怎么思索,就照葫芦画瓢改造了一下。

原理很简单,首先通过通配符进行匹配,然后把读到的数据通过while循环读到变量 line进行处理。

 s3cmd ls s3://tidbtest-1304250695/20220330* | grep "DIR" | while read -r line;   do s3_file_name=`echo $line | awk -F "/" '{print $(NF-1)}'`;     if [[ `echo ${s3_file_name:0:8}` -eq '20220330' ]];      then echo "s3cmd del ${S3PREFIX}/$s3_file_name" ;    fi;  done
复制

这个脚本执行效果如下。

现在把echo取消,直接执行。

 s3cmd ls s3://tidbtest-1304250695/20220330* | grep "DIR" | while read -r line;   do s3_file_name=`echo $line | awk -F "/" '{print $(NF-1)}'`;     if [[ `echo ${s3_file_name:0:8}` -eq '20220330' ]];      then  s3cmd del ${S3PREFIX}/$s3_file_name ;    fi;  done
复制

发现还是很顽固,程序看上去像是执行成功了,但是查看还是没有删掉。

接下来尝试在目录后面加 * 删除。

 s3cmd ls s3://tidbtest-1304250695/20220330* | grep "DIR" | while read -r line;   do s3_file_name=`echo $line | awk -F "/" '{print $(NF-1)}'`; 
    if [[ `echo ${s3_file_name:0:8}` -eq '20220330' ]]; 
     then  s3cmd del ${S3PREFIX}/$s3_file_name/* ;
    fi; 
 done

复制

这回调整之后终于可以了。

后面空闲下来查了一下文档,真是傻啊。不能直接删除文件夹,是需要加-r参数进行递归删除的。

发现自己有时间去改造脚本,就没时间去搜索查阅一下这个问题,这毛病真的得改改。

后记

这波操作还是因为对象存储不是很熟悉导致的,把简单的问题搞复杂化了。不过COS的界面上直接就有生命周期管理。功能还是很强的,可以帮助你将xx天之前的文件下沉到深度归档存储,也可以将xx天之前的直接进行删除,省去了脚本写删除的烦恼。


文章转载自TiDB之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论