参考腾讯云官方文档:https://cloud.tencent.com/document/product/436/63144
第一步:下载coscli工具
Linux-386:wget https://cosbrowser.cloud.tencent.com/software/coscli/coscli-linux-386
Linux-amd64:wget https://cosbrowser.cloud.tencent.com/software/coscli/coscli-linux-amd64
Linux-arm:wget https://cosbrowser.cloud.tencent.com/software/coscli/coscli-linux-arm
Linux-arm64:wget https://cosbrowser.cloud.tencent.com/software/coscli/coscli-linux-arm64
第二步 安装工具
mv coscli-linux-amd64 coscli
chmod 755 coscli
查看版本
./coscli --version
第三步 ,配置
初次使用时,COSCLI 会自动调用 ./coscli config init 在 ~/.cos.yaml 位置生成配置文件,您可以在命令行交互式的完成配置。后续您也可以使用 ./coscli config init 命令在其他位置为 COSCLI 交互式地生成配置文件。您可以使用./coscli config show来查看配置文件的所在位置和配置参数信息。
迁移脚本,例如
bash
cat cos_upload_test.sh
#!/bin/bash
# 获取当前日期
CURRENT_DATE=$(date +'%Y-%m-%d')
# 本地文件夹路径(根据日期动态生成)
LOCAL_DIR="/ddt/fs/recordings/$CURRENT_DATE"
echo "Local directory: $LOCAL_DIR"
# 腾讯云COS的目标路径(不包括Bucket名,因为coscli命令会指定Bucket)
COS_BUCKET="prod-13*****7290"
COS_TARGET_DIR="cos://${COS_BUCKET}/ddt/fs/recordings/$CURRENT_DATE/"
# coscli命令的路径(如果coscli在PATH中,则可以直接使用coscli)
COSCLI="/root/downloads/coscli/coscli"
# 设置并发上传的数量
JOBS=10
# 日志目录和文件路径(加上当天日期)
LOG_DIR="/var/log/coscli"
LOG_FILE="$LOG_DIR/$CURRENT_DATE.log"
# 确保日志目录存在
mkdir -p "$LOG_DIR"
# 查找的时间范围
MINUTES_AGO_1200=$(date -d '1200 minutes ago' +'%Y-%m-%d %H:%M:%S')
FIVE_MINUTES_AGO=$(date -d '5 minutes ago' +'%Y-%m-%d %H:%M:%S')
# 无限循环,保持后台运行
while true; do
# 查找本地文件夹中在过去1200分钟内新增或修改的文件,并且修改时间是5分钟之前的文件
FILES=$(find "$LOCAL_DIR" -type f -newermt "$MINUTES_AGO_1200" ! -newermt "$FIVE_MINUTES_AGO")
if [ -z "$FILES" ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - No files found within the specified time range." >> $LOG_FILE
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - Found files within the specified time range:" >> $LOG_FILE
echo "$FILES" >> $LOG_FILE
fi
# 清理临时文件列表
> /tmp/upload_list.txt
# 遍历找到的文件
for FILE in $FILES; do
# 获取文件的相对路径(相对于LOCAL_DIR)
RELATIVE_PATH="${FILE#$LOCAL_DIR/}"
# 构造COS的目标路径
COS_PATH="${COS_TARGET_DIR}${RELATIVE_PATH}"
# 获取文件的最后修改时间
MOD_TIME=$(stat -c %Y "$FILE") # 获取最后修改时间(以秒为单位)
MOD_TIME_HUMAN=$(date -d @$MOD_TIME +"%Y-%m-%d %H:%M:%S") # 将时间转换为人类可读格式
echo "$(date '+%Y-%m-%d %H:%M:%S') - Local file: $FILE" >> $LOG_FILE
echo "$(date '+%Y-%m-%d %H:%M:%S') - Last modified time: $MOD_TIME_HUMAN" >> $LOG_FILE
echo "$(date '+%Y-%m-%d %H:%M:%S') - COS path: $COS_PATH" >> $LOG_FILE
# 检查文件内容是否不为空
if [ -s "$FILE" ]; then
# 将文件路径和目标路径写入临时文件
echo "$FILE $COS_PATH" >> /tmp/upload_list.txt
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - File $FILE is empty, skipping." >> $LOG_FILE
fi
done
# 使用 xargs 并发上传文件
if [ -f /tmp/upload_list.txt ]; then
cat /tmp/upload_list.txt | xargs -P $JOBS -n 2 bash -c '
FILE=$1
COS_PATH=$2
LOG_FILE=$3
COSCLI=$4
if "$COSCLI" cp "$FILE" "$COS_PATH" >> "$LOG_FILE" 2>&1; then
echo "$(date +%Y-%m-%d\ %H:%M:%S) - Uploaded and deleted: $FILE" >> "$LOG_FILE"
rm -f "$FILE"
else
echo "$(date +%Y-%m-%d\ %H:%M:%S) - Failed to upload: $FILE" >> "$LOG_FILE"
fi
' _ "$COSCLI" "$LOG_FILE"
fi
# 清理临时文件
rm -f /tmp/upload_list.txt
# 休眠一段时间(例如60秒),避免频繁检查文件系统
sleep 15
done
执行脚本./cos_upload_test.sh即可迁移
查看迁移日志,成功失败记录
