s3cmd 安装使用,以及大批量删除文件
最近在做一个发票保存的功能,遇到文件无法上传问题,因为.net
代码,对.net
不是那么熟悉,这个问题找了好久,才发现是测试环境文件服务器满了。
后面经过和Leader
沟通,才知道使用是文件服务是Amazon Simple Storage Service
,因为后面三个单词的首字母都是S,所以简称 Amazon s3
。
知道了使用什么文件服务器,那么就需要使用对应的链接工具,登录文件服务器对历史文件进行清理,但可惜的是,windows系统中的一些链接软件非常拉胯,连上去要么卡死,要么直接链接不上。
后面了解到了针对linux系统有一款软件叫s3cmd
,可惜我用的电脑是windows系统,这个软件我没法用。但是这也难不倒我,我想到了用docker
开一个ubuntu镜像来解决这个问题,以下是我解决问题的过程。
第一步 下载docker镜像
docker pull ubuntu
第二步 更新 ubuntu
因为默认下载的是最小化的ubuntu系统,总共才有78M,所以需要更新软件包列表
apt update
第三步 安装s3cmd
apt-get install s3cmd
第四步 配置s3cmd
配置文件地址:
/root/.s3cfg
如果在这个目录找不到配置文件,可以用以下命令来配置s3cmd
s3cmd --configure
推荐更改的配置项:
access_key = <your access key id>
secret_key = <your access key secret>
host_base = host:port
host_bucket = %(bucket)s.host
use_https = False #Default is True
第五步 编写删除脚本,删除文件
因为测试环境文件桶满了,所以要批量删除以前老的文件。我就想到用shell 脚本来删除。
查看所有桶
s3cmd ls
查看指定的buctke内容
s3cmd ls s3://my-bucket-name
把文件名称写入文件
s3cmd ls s3://my-bucket-name >> a.txt
查找到a.txt
当中的最后五千行写入b.txt
tail -5000n a.txt >> b.txt
写一个shell脚本截取文件名字符串,并且执行删除命令
删除命令
s3cmd del s3://BUCKET/OBJECT
批量删除脚本
#!/bin/bash
# 检查文件是否存在
if [ -f "a.txt" ]; then
echo "文件a.txt存在,开始读取..."
# 使用while循环和read命令读取文件
while IFS= read -r line
do
s3cmd del s3://BUCKET/"line"
done < "a.txt"
else
echo "文件a.txt不存在,请检查文件路径是否正确。"
fi
s3其他常用命令
S3没有文件夹的概念,只有桶(bucket)的概念
创建桶:
s3cmd mb s3://my-bucket-name
删除空桶
s3cmd rb s3://my-bucket-name
查看所有buckets
s3cmd ls
查看指定bucket的内容
s3cmd ls s3://my-bucket-name
上传文件
s3cmd put file.txt s3://my-bucket-name/file.txt
下载文件
s3cmd get s3://BUCKET/OBJECT LOCAL_FILE
删除文件 Delete file from bucket
s3cmd del s3://BUCKET/OBJECT
查看bucket大小
s3cmd du [s3://BUCKET[/PREFIX]]
s3cmd du s3://my-bucket-name
拷贝文件
s3cmd cp s3://BUCKET1/OBJECT1 s3://BUCKET2[/OBJECT2]
s3cmd get s3://my-bucket-name/file.txt s3://my-bucket-copy-name2/file.txt
移动文件
s3cmd mv s3://BUCKET1/OBJECT1 s3://BUCKET2[/OBJECT2]
s3cmd mv s3://my-bucket-name/file.txt s3://my-bucket-mv-name/file.txt
权限相关:
上传文件时指定权限public:
s3cmd put --acl-public file.txt s3://my-bucket-name/file.txt
为已上传的文件设置public权限
s3cmd setacl s3://BUCKET[/OBJECT]
s3cmd setacl s3://my-bucket-name/myfile.txt --acl-public
生成url下载链接,并指定链接有效期
day=`date -d 'now + 1 year' +%s`
echo $day
# 生成文件url共享地址,并指定有效期,时间格式为时间戳
s3cmd signurl s3://my-bucket-name/file.txt $day