-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathrclone_sync.sh
122 lines (109 loc) · 4.86 KB
/
rclone_sync.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/bin/bash
# 日志文件路径
LOG_FILE="/root/rclone_sync.log"
# 命令参数文件路径
COMMAND_FILE="/root/rclone_command.txt"
echo "---------------------------------------------" >> $LOG_FILE
# 记录脚本执行开始时间
start_time=$(date +%s)
# 检查是否需要更新脚本...
echo "检查是否需要更新脚本..."
echo "$(date) 检查是否需要更新脚本..." >> $LOG_FILE
if [ -f "/root/rclone_sync.sh" ]; then
local_sha=$(sha256sum /root/rclone_sync.sh | cut -d ' ' -f 1)
remote_sha=$(curl -s https://raw.githubusercontent.com/ypq123456789/rclone_sync/main/rclone_sync.sh | sha256sum | cut -d ' ' -f 1)
if [ "$local_sha" != "$remote_sha" ]; then
echo "发现新版本脚本,正在更新..."
echo "$(date) 发现新版本脚本,正在更新..." >> $LOG_FILE
sudo curl -o /root/rclone_sync.sh -f https://raw.githubusercontent.com/ypq123456789/rclone_sync/main/rclone_sync.sh
echo "脚本已更新,重新执行更新后的脚本。"
echo "$(date) 脚本已更新,重新执行更新后的脚本。" >> $LOG_FILE
bash /root/rclone_sync.sh
exit
else
echo "脚本已经是最新的,无需更新。"
echo "$(date) 脚本已经是最新的,无需更新。" >> $LOG_FILE
fi
fi
# 检查是否安装了rclone,若未安装则进行安装
if ! command -v rclone &> /dev/null; then
echo "rclone 未找到,正在安装..."
echo "$(date) rclone 未找到,正在安装..." >> $LOG_FILE
sudo apt install rclone -y
# 询问是否更换rclone二进制文件
echo "是否需要更换rclone的二进制文件?请在10s内输入直链网址,否则按回车继续."
read -t 10 binary_link
if [ ! -z "$binary_link" ]; then
echo "正在从 $binary_link 下载rclone并安装到 /usr/bin/rclone 下..."
sudo curl -L $binary_link -o /tmp/rclone && sudo mv /tmp/rclone /usr/bin/rclone && sudo chmod +x /usr/bin/rclone
echo "$(date) 从 $binary_link 下载并安装rclone到 /usr/bin/rclone。" >> $LOG_FILE
fi
else
echo "rclone已经安装."
echo "$(date) rclone已经安装." >> $LOG_FILE
fi
# 检查rclone配置文件
echo "$(date) 检查rclone配置文件" >> $LOG_FILE
config_file="/root/.config/rclone/rclone.conf"
if [ -f "$config_file" ];then
echo "rclone 配置文件已存在."
echo "$(date) rclone 配置文件已存在." >> $LOG_FILE
else
echo "rclone 配置文件不存在,请提供配置文件的直链URL:"
read config_link
if [ ! -z "$config_link" ];then
mkdir -p $(dirname "$config_file") && curl -L $config_link -o "$config_file"
echo "已从 $config_link 下载rclone配置文件到 $config_file."
echo "$(date) 已从 $config_link 下载rclone配置文件到 $config_file." >> $LOG_FILE
fi
fi
# 函数:读取rclone sync命令的参数
echo "$(date) 读取rclone sync命令的参数" >> $LOG_FILE
read_command_params() {
echo "请输入 rclone sync 命令(请不要设置日志文件路径,默认保存在/root/rclone.log):"
read command_params
# 保存用户输入的参数到文件,并追加固定的日志文件路径参数
echo "$command_params --log-file=/root/rclone.log" > $COMMAND_FILE
}
# 如果参数文件存在则使用它,否则从用户输入中读取参数。
if [ ! -f $COMMAND_FILE ]; then
# 读取用户输入的新参数
read_command_params
else
echo "使用保存的 rclone sync 命令参数."
echo "$(date) 使用保存的 rclone sync 命令参数." >> $LOG_FILE
command_params=$(cat $COMMAND_FILE)
echo "当前参数为:$command_params"
echo "如果您想要修改这些参数,请在10s内输入 'y':"
read -t 10 modify_choice
if [ "$modify_choice" == "y" ];then
# 用户选择修改参数
echo "$(date) 用户选择修改参数" >> $LOG_FILE
read_command_params
else
echo "没有修改rclone sync命令."
echo "$(date) 没有修改rclone sync命令." >> $LOG_FILE
fi
fi
# 执行 rclone sync 命令
echo "$(date) 执行 rclone sync 命令" >> $LOG_FILE
bash -c "$(cat $COMMAND_FILE)"
# 记录脚本执行结束时间
end_time=$(date +%s)
# 计算执行时间
execution_time=$((end_time - start_time))
# 将执行时间转换为小时、分钟和秒
hours=$((execution_time / 3600))
minutes=$(( (execution_time % 3600) / 60 ))
seconds=$((execution_time % 60))
# 根据执行时间的长度,选择合适的格式进行输出
if [ $hours -gt 0 ]; then
echo "脚本执行共用时:$hours 小时 $minutes 分钟 $seconds 秒" >> $LOG_FILE
elif [ $minutes -gt 0 ]; then
echo "脚本执行共用时:$minutes 分钟 $seconds 秒" >> $LOG_FILE
else
echo "脚本执行共用时:$seconds 秒" >> $LOG_FILE
fi
echo "rclone sync 任务已完成."
echo "$(date) rclone sync 任务已完成." >> $LOG_FILE
echo "---------------------------------------------" >> $LOG_FILE