-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhome-cleaner
executable file
·137 lines (126 loc) · 3.64 KB
/
home-cleaner
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/usr/bin/env bash
#
# 清理家目录中的垃圾文件
#
# 规则目录所在的文件夹
SET_RULE_PATH="$HOME/*******/*******/HOME-Cleaner"
# find 支持的正则类型
# findutils-default (默认), ed, emacs, gnu-awk, grep, posix-awk, awk,
# posix-basic, posix-egrep, egrep, posix-extended, posix-minimal-basic, sed
FRT="findutils-default" # frt = find regex type
# 需禁用的规则放至此文件夹
PATH_DISABLE="$SET_RULE_PATH/app.disable"
# 需启用的规则放至此文件夹
PATH_ENABLE="$SET_RULE_PATH/app.enable"
# 单个文件 (Single File)
Single_File() {
echo -e "$1" | awk -F '^SF\\|\\|' '{print $2}' |
while read -r SF; do
if [[ -f "$HOME/$SF" ]]; then
#echo -e "[SF] Delete: $SF"
rm -rf "$HOME/$SF"
fi
done
}
# 多个规律文件 (Rule File)
Rule_File() {
echo -e "$1" | awk -F '^RF\\|\\|' '{print $2}' |
while read -r RF; do
FMD=$(echo -e "$RF" | tr '/' '\n' | wc -l) # fms = find max depth
find "$HOME" -maxdepth $FMD -type f -regextype $FRT -regex "$HOME/$RF" | while read -r RF2SF; do
#echo -e "[RF] Delete: $RF2SF"
rm -rf "$RF2SF"
done
done
}
# 需重建单个文件 (Make File)
Make_File() {
echo -e "$1" | awk -F '^MF\\|\\|' '{print $2}' |
while read -r MF; do
if [[ -f "$HOME/$MF" ]]; then
#echo -e "[MF] Re-touch: $MF"
rm -rf "$HOME/$MF"
touch "$HOME/$MF"
fi
done
}
# 单个目录 (Single Dir)
Single_Dir() {
echo -e "$1" | awk -F '^SD\\|\\|' '{print $2}' |
while read -r SD; do
if [[ -d "$HOME/$SD" ]]; then
#echo -e "[SD] Delete: $SD"
rm -rf "$HOME/$SD"
fi
done
}
# 多个规律目录 (Rule Dir)
Rule_Dir() {
echo -e "$1" | awk -F '^RD\\|\\|' '{print $2}' |
while read -r RD; do
FMD=$(echo -e "$RD" | tr '/' '\n' | wc -l) # fms = find max depth
find "$HOME" -maxdepth $FMD -type d -regextype $FRT -regex "$HOME/$RD" | while read -r RD2SD; do
#echo -e "[RD] Delete: $RD2SD"
rm -rf "$RD2SD"
done
done
}
# 需重建单个目录 (Make Dir)
Make_Dir() {
echo -e "$1" | awk -F '^MD\\|\\|' '{print $2}' |
while read -r MD; do
if [[ -d "$HOME/$MD" ]]; then
#echo -e "[MD] Re-mkdir: $MD"
rm -rf "$HOME/$MD"
mkdir -p "$HOME/$MD"
fi
done
}
# Shell 命令 (Shell Command)
Shell_Command() {
echo -e "$1" | awk -F '^SC\\|\\|' '{print $2}' |
while read -r SC; do
#echo -e "[SC] Execute: $SC"
bash -c "$SC" 1>/dev/null 2>&1
done
}
# 遍历 APP 规则
APP_RULE=$(cat `find "$PATH_ENABLE" -maxdepth 1 -type f` | sed '/^#/d;/^$/d')
# 文件
# 单个文件 (Single File)
SF_RULE=$(echo -e "$APP_RULE" | grep '^SF||')
if [[ "$?" == "0" ]]; then
Single_File "$SF_RULE"
fi
# 多个规律文件 (Rule File)
RF_RULE=$(echo -e "$APP_RULE" | grep '^RF||')
if [[ "$?" == "0" ]]; then
Rule_File "$RF_RULE"
fi
# 需重建单个文件 (Make File)
MF_RULE=$(echo -e "$APP_RULE" | grep '^MF||')
if [[ "$?" == "0" ]]; then
Make_File "$MF_RULE"
fi
# 目录
# 单个目录 (Single Dir)
SD_RULE=$(echo -e "$APP_RULE" | grep '^SD||')
if [[ "$?" == "0" ]]; then
Single_Dir "$SD_RULE"
fi
# 多个规律目录 (Rule Dir)
RD_RULE=$(echo -e "$APP_RULE" | grep '^RD||')
if [[ "$?" == "0" ]]; then
Rule_Dir "$RD_RULE"
fi
# 需重建单个目录 (Make Dir)
MD_RULE=$(echo -e "$APP_RULE" | grep '^MD||')
if [[ "$?" == "0" ]]; then
Make_Dir "$MD_RULE"
fi
# 记录
# Shell 命令 (Shell Command)
SC_RULE=$(echo -e "$APP_RULE" | grep '^SC||')
if [[ "$?" == "0" ]]; then
Shell_Command "$SC_RULE"
fi