新增rclone资源搬运脚本
This commit is contained in:
parent
d4541281a6
commit
dcc3d29b0f
1
rclone/transport/README.md
Normal file
1
rclone/transport/README.md
Normal file
@ -0,0 +1 @@
|
||||
# `rclone` 资源搬运脚本
|
82
rclone/transport/transport.sh
Normal file
82
rclone/transport/transport.sh
Normal file
@ -0,0 +1,82 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 定义原数据网盘和目标网盘列表
|
||||
originalgdrive="gMediaOriginal:" # 使用 rclone 的远程名
|
||||
target_drives=("gtrandall:" "gtuser1:" "gtuser2:" "gtuser3:" "gtuser4:") # 使用 rclone 的远程名
|
||||
|
||||
# 初始化计数器
|
||||
counter=0
|
||||
|
||||
# 初始化失败文件列表
|
||||
failed_files=()
|
||||
|
||||
function process_directory {
|
||||
local current_path="$1"
|
||||
local items_json=$(rclone lsjson "$originalgdrive$current_path")
|
||||
|
||||
# 读取 json 输出并解析文件和目录
|
||||
echo "$items_json" | jq -c '.[]' | while read -r item; do
|
||||
((counter++))
|
||||
local name=$(echo "$item" | jq -r '.Path')
|
||||
local is_dir=$(echo "$item" | jq -r '.IsDir')
|
||||
|
||||
if [ "$is_dir" == "true" ]; then
|
||||
# 是目录,使用不同的gtransport创建目标目录并递归处理
|
||||
local new_path="$current_path$name/"
|
||||
local dest_index=$((counter % ${#target_drives[@]}))
|
||||
local dest_drive="${target_drives[$dest_index]}"
|
||||
|
||||
echo "检查目录是否存在 $dest_drive$new_path"
|
||||
if ! rclone lsf "$dest_drive$new_path" > /dev/null 2>&1; then
|
||||
echo "创建目录 $dest_drive$new_path"
|
||||
if ! rclone mkdir "$dest_drive$new_path"; then
|
||||
((counter++))
|
||||
echo "创建目录 $dest_drive$new_path 失败,尝试使用下一个传输器"
|
||||
dest_index=$((counter % ${#target_drives[@]}))
|
||||
dest_drive="${target_drives[$dest_index]}"
|
||||
|
||||
if ! rclone mkdir "$dest_drive$new_path"; then
|
||||
echo "第二次尝试失败。将 $dest_drive$new_path 添加到失败文件列表。"
|
||||
failed_files+=("$dest_drive$new_path")
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "目录已存在 $dest_drive$new_path"
|
||||
fi
|
||||
process_directory "$new_path"
|
||||
else
|
||||
# 是文件,检查是否是中断的文件
|
||||
local src="$originalgdrive$current_path$name"
|
||||
|
||||
# 先递增计数器,然后使用更新后的计数器值选择目标网盘
|
||||
local dest_index=$((counter % ${#target_drives[@]}))
|
||||
local dest_drive="${target_drives[$dest_index]}"
|
||||
local dest="$dest_drive$current_path"
|
||||
|
||||
echo "检查文件是否存在 $dest$name"
|
||||
if ! rclone lsf "$dest$name" > /dev/null 2>&1; then
|
||||
echo "复制 $src 到 $dest"
|
||||
if ! rclone copy "$src" "$dest" --progress; then
|
||||
((counter++))
|
||||
echo "复制 $src 到 $dest 出错,尝试使用下一个传输器"
|
||||
dest_index=$((counter % ${#target_drives[@]}))
|
||||
dest_drive="${target_drives[$dest_index]}"
|
||||
dest="$dest_drive$current_path"
|
||||
echo "复制 $src 到 $dest"
|
||||
if ! rclone copy "$src" "$dest" --progress; then
|
||||
echo "第二次尝试失败。将 $src 添加到失败文件列表。"
|
||||
# 如果两次都失败,则记录失败的文件
|
||||
failed_files+=("$src")
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "文件已存在 $dest$name"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# 开始处理根目录
|
||||
process_directory ""
|
||||
|
||||
echo "文件传输完成!"
|
Loading…
Reference in New Issue
Block a user