63 lines
1.6 KiB
Bash
63 lines
1.6 KiB
Bash
#!/bin/bash
|
|
|
|
# 颜色定义
|
|
CYAN="\033[1;36m"
|
|
RED="\033[0;31m"
|
|
GREEN="\033[1;32m"
|
|
RESET="\033[0m"
|
|
|
|
:<<'COMMENT'
|
|
输入OSS内部桶介质存储路径列表
|
|
自动识别目录或文件
|
|
将其同步到本地
|
|
COMMENT
|
|
|
|
# 定义本地存储路径
|
|
LOCAL_PATH="/data/media"
|
|
mkdir -p "$LOCAL_PATH" # 确保本地路径存在
|
|
|
|
# OSS内部桶和外部桶的配置文件
|
|
INTERNAL_S3CFG=~/.s3cfg-internal
|
|
|
|
# 检查配置文件是否存在
|
|
if [ ! -f "$INTERNAL_S3CFG" ]; then
|
|
echo -e "${RED}Internal S3 configuration file not found.${RESET}"
|
|
exit 1
|
|
fi
|
|
|
|
# 检查是否传入了OSS路径参数
|
|
if [ $# -eq 0 ]; then
|
|
echo -e "${RED}No OSS paths provided. Please provide OSS paths as arguments.${RESET}"
|
|
exit 1
|
|
fi
|
|
|
|
# 遍历OSS路径列表
|
|
for oss_path in "$@"; do
|
|
echo -e "${CYAN}Processing OSS path: $oss_path${RESET}"
|
|
|
|
# 检查路径是否有效
|
|
if [[ ! $oss_path =~ ^s3:// ]]; then
|
|
echo -e "${RED}Skipping invalid OSS path: $oss_path${RESET}"
|
|
continue
|
|
fi
|
|
|
|
# 提取目标路径的本地路径
|
|
local_target="$LOCAL_PATH/$(basename "$oss_path")"
|
|
if [[ $oss_path =~ /$ ]]; then
|
|
# 如果是目录,确保尾部有斜杠
|
|
local_target="$LOCAL_PATH/$(basename "$oss_path")/"
|
|
mkdir -p "$local_target" # 确保本地目录存在
|
|
fi
|
|
|
|
# 使用 s3cmd sync 同步文件或目录
|
|
echo -e "${GREEN}Syncing $oss_path to local path $local_target${RESET}"
|
|
s3cmd -c "$INTERNAL_S3CFG" sync "$oss_path" "$local_target" # | grep "Downloaded"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "${GREEN}Successfully synced $oss_path to $local_target${RESET}"
|
|
else
|
|
echo -e "${RED}Error: Failed to sync $oss_path.${RESET}"
|
|
fi
|
|
done
|
|
|
|
echo -e "${GREEN}Script execution completed.${RESET}" |