本文目录导读:

- 批量文件/目录镜像 (rsync)
- 批量Docker镜像镜像(同步到私有仓库)
- 批量Git仓库镜像(同步所有仓库)
- 批量MySQL/MariaDB数据库镜像(备份+还原)
- 批量S3/对象存储镜像 (aws CLI + 循环)
- 💡 实用技巧
批量文件/目录镜像 (rsync)
最常用的是 rsync,结合 find 或 for 循环。
脚本示例 (bash): 同步多个本地目录到远程服务器
#!/bin/bash
# 定义源目录列表和目标基础路径
SOURCE_DIRS=(
"/data/project1"
"/data/project2"
"/data/project3"
)
REMOTE_USER="user"
REMOTE_HOST="192.168.1.100"
REMOTE_BASE_PATH="/backup"
for dir in "${SOURCE_DIRS[@]}"; do
# 获取目录名(如 project1)
dir_name=$(basename "$dir")
echo "正在同步: $dir -> $REMOTE_HOST:$REMOTE_BASE_PATH/$dir_name"
rsync -avz --delete "$dir/" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_BASE_PATH}/${dir_name}/"
if [ $? -eq 0 ]; then
echo "✅ 同步成功: $dir_name"
else
echo "❌ 同步失败: $dir_name"
fi
done
批量Docker镜像镜像(同步到私有仓库)
从 Docker Hub 拉取并重新打标签推送到私有仓库。
脚本示例 (bash):
#!/bin/bash
PRIVATE_REGISTRY="registry.yourcompany.com"
IMAGES_LIST=(
"nginx:1.25"
"redis:7-alpine"
"mysql:8.0"
"node:18-alpine"
)
for image in "${IMAGES_LIST[@]}"; do
echo "处理镜像: $image"
# 拉取原始镜像
docker pull "$image" || { echo "❌ 拉取失败"; continue; }
# 打标签到私有仓库
new_tag="${PRIVATE_REGISTRY}/library/${image}"
docker tag "$image" "$new_tag"
# 推送到私有仓库
docker push "$new_tag" && echo "✅ 推送成功: $new_tag" || echo "❌ 推送失败: $new_tag"
# 可选:清理本地标签
docker rmi "$new_tag"
done
更高级版: 使用 skopeo 直接跨仓库复制,无需本地存储镜像。
#!/bin/bash
# 需要安装 skopeo: apt install skopeo 或 brew install skopeo
SOURCE_REGISTRY="docker.io"
DEST_REGISTRY="registry.yourcompany.com"
IMAGES=("library/nginx:latest" "library/redis:7" "library/mysql:8.0")
for image in "${IMAGES[@]}"; do
skopeo copy --all \
"docker://${SOURCE_REGISTRY}/${image}" \
"docker://${DEST_REGISTRY}/${image}"
done
批量Git仓库镜像(同步所有仓库)
将一组Git仓库从GitHub等源同步到内部GitLab。
脚本示例 (bash):
#!/bin/bash
GITLAB_GROUP="mygroup"
REPOS=(
"https://github.com/user/repo1.git"
"https://github.com/user/repo2.git"
"https://github.com/user/repo3.git"
)
GITLAB_BASE="git@gitlab.internal.com:${GITLAB_GROUP}"
for repo_url in "${REPOS[@]}"; do
# 提取仓库名(如 repo1)
repo_name=$(basename "$repo_url" .git)
echo "镜像仓库: $repo_name"
# 裸克隆源仓库
git clone --mirror "$repo_url" "/tmp/${repo_name}.git"
# 进入裸仓库目录
cd "/tmp/${repo_name}.git"
# 添加目标远程并推送
git remote add gitlab "${GITLAB_BASE}/${repo_name}.git"
git push --mirror gitlab
cd /tmp
rm -rf "/tmp/${repo_name}.git"
echo "✅ 完成: $repo_name"
done
批量MySQL/MariaDB数据库镜像(备份+还原)
定时将多个数据库远程同步。
脚本示例 (bash): 使用 mysqldump 和 mysql 配合循环。
#!/bin/bash
SOURCE_DB_HOST="db1.example.com"
SOURCE_USER="backup_user"
SOURCE_PASS="password"
DEST_DB_HOST="db2.example.com"
DEST_USER="restore_user"
DEST_PASS="password"
# 要同步的数据库列表
DATABASES=("db_app1" "db_app2" "db_app3")
for db in "${DATABASES[@]}"; do
echo "开始备份: $db"
mysqldump -h "$SOURCE_DB_HOST" -u "$SOURCE_USER" -p"$SOURCE_PASS" \
--single-transaction --routines --triggers "$db" > "/tmp/${db}.sql"
echo "开始还原: $db -> $DEST_DB_HOST"
mysql -h "$DEST_DB_HOST" -u "$DEST_USER" -p"$DEST_PASS" "$db" < "/tmp/${db}.sql"
if [ $? -eq 0 ]; then
echo "✅ 同步完成: $db"
else
echo "❌ 同步失败: $db"
fi
rm -f "/tmp/${db}.sql"
done
批量S3/对象存储镜像 (aws CLI + 循环)
将多个S3桶镜像到另一个区域或另一个云存储(如阿里云OSS)。
#!/bin/bash
SOURCES=(
"s3://my-bucket1/data"
"s3://my-bucket2/logs"
"s3://my-bucket3/assets"
)
DEST_BASE="s3://backup-bucket"
for source in "${SOURCES[@]}"; do
bucket_name=$(echo "$source" | cut -d'/' -f3)
dest_path="${DEST_BASE}/${bucket_name}"
echo "同步: $source -> $dest_path"
aws s3 sync "$source" "$dest_path" --delete
done
💡 实用技巧
- 使用配置文件:将源和目标对写入
.csv或.json文件中,脚本读取数组,方便管理大批量任务。 - 日志记录:添加时间戳重定向到日志文件:
echo "$(date) - 开始同步 $dir" >> sync.log
- 错误重试:对于网络不稳定的情况,添加重试逻辑:
for i in {1..3}; do rsync ... && break || sleep 5 done - 并行执行:使用
&或xargs -P提高效率(注意IO和网络压力):for item in "${ARRAY[@]}"; do (do_sync "$item") & done wait
| 场景 | 推荐工具 | 批量方式 |
|---|---|---|
| 文件/目录 | rsync | for循环+rsync |
| Docker镜像 | skopeo / docker | for循环+skopeo |
| Git仓库 | git clone --mirror | for循环+push |
| 数据库 | mysqldump + mysql | for循环+重定向 |
| 对象存储 | aws s3 / rclone | for循环+sync |
如果你有具体要镜像的资源类型(如Debian软件包、npm包、Maven构件等),可以告诉我,我可以提供更针对性的脚本示例。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播