-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcli_test.sh
203 lines (144 loc) · 3.56 KB
/
cli_test.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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#! /bin/bash
cargo install --path . --force
if [[ "$CARGO_HOME" ]] ; then
TMP_PATH="$CARGO_HOME/bin"
else
TMP_PATH="$HOME/.cargo/bin"
fi
export PATH="$PATH:$TMP_PATH"
cd $(mktemp -d)
echo "Remove some files"
touch {a..z}.txt
rmd {a..f}.txt
for i in {g..z}.txt ; do
[[ -e "$i" ]] || exit 1
done
echo "Remove duplicates"
for i in {a..z} ; do
echo "TEST" > "$i"
done
rmd -d
COUNT=0
for i in {a..z} ; do
[[ -e "$i" ]] && (( COUNT++ ))
done
[[ "$COUNT" == '1' ]] || exit 1
echo "Remove duplicates in a different directory"
mkdir -p "SOME/PATH"
echo "test" > "SOME/FILE"
echo "test" > "SOME/PATH/FILE_2"
echo "test" > "SOME/FILE_3"
echo "test" > "DUP_A"
echo "test" > "DUP_B"
rmd -d 'SOME'
COUNT=0
[[ -e "SOME/FILE" ]] && (( COUNT++ ))
[[ -e "SOME/PATH/FILE_2" ]] && (( COUNT++ ))
[[ -e "SOME/FILE_3" ]] && (( COUNT++ ))
[[ -e "DUP_A" ]] || exit
[[ -e "DUP_B" ]] || exit
[[ "$COUNT" == '1' ]] || exit 1
echo "Remove Directory"
rmd -rf 'SOME'
[[ -e "SOME" ]] && exit 1
echo "Test Interactive"
touch {a..z}
yes | rmd -i {a..z}
for i in {a..z} ; do
[[ -e "$i" ]] && exit 1
done
touch {a..z}
yes n | rmd -i {a..z}
for i in {a..z} ; do
[[ -e "$i" ]] || exit 1
done
echo "Remove old files"
mkdir "old"
touch old/{a..z}.txt
# date in year-month-day format
touch -d '2016-01-01' old/{A..Z}.txt
# remove file older then 4 years, like {A..Z}.txt
rmd --older 4y
for i in old/{a..z}.txt ; do
[[ -e "$i" ]] || exit 1
done
for i in old/{A..Z}.txt ; do
[[ -e "$i" ]] && exit 1
done
echo "Remove new files"
mkdir new
touch new/{a..z}.txt
# date in year-month-day format
touch -d '2017-01-01' new/{A..Z}.txt
# remove file newer than 2 year in new subdirectory
rmd --newer 2y new
for i in new/{a..z}.txt ; do
[[ -e "$i" ]] && exit 1
done
for i in new/{A..Z}.txt ; do
[[ -e "$i" ]] || exit 1
done
echo "Remove small files"
mkdir small
for i in small/{a..z}.txt ; do
dd if=/dev/full of="$i" bs=1 count=$(( RANDOM % 100 + 50 )) &> /dev/null
done
for i in small{A..Z}.txt ; do
dd if=/dev/full of="$i" bs=1 count=$(( RANDOM % 1000 + 1000 )) &> /dev/null
done
rmd --smaller 1kb small
for i in small/{a..z}.txt ; do
[[ -e "$i" ]] && exit 1
done
for i in small{A..Z}.txt ; do
[[ -e "$i" ]] || exit 1
done
echo "Remove large files"
mkdir large
for i in large/{a..z}.txt ; do
dd if=/dev/full of="$i" bs=1 count=$(( RANDOM % 100 + 50 )) &> /dev/null
done
for i in large/{A..Z}.txt ; do
dd if=/dev/full of="$i" bs=1 count=$(( RANDOM % 1000 + 1000 )) &> /dev/null
done
rmd --larger 1kb large
for i in large/{a..z}.txt ; do
[[ -e "$i" ]] || exit 1
done
for i in large/{A..Z}.txt ; do
[[ -e "$i" ]] && exit 1
done
echo "clean empty directories"
mkdir -p not_clean/{a..z}
touch not_clean/{a..z}/{a..z}.txt
cp -r not_clean clean
rmd -d not_clean
for dir in not_clean/{a..z} ; do
[[ -e "$dir" ]] || exit 1
done
rmd -d -c clean
(( count = 0 ))
for dir in clean/{a..z} ; do
if [[ -e "$dir" ]] ; then
(( count++ ))
fi
done
(( count == 1 )) || exit 1
mkdir verbose_test
mkdir -p verbose_test/{a..z}
# 26 * 26 files
for dir in verbose_test/* ; do
for file in {a..z}.txt ; do
echo "abcd" > "$dir"/"$file"
done
done
# total size (4 + 1) * 26 * 26 = 2704, there's the newline
rmd -vv -c --smaller 1kb verbose_test | grep '3.38 kb freed' || exit 1
for dir in verbose_test/{a..z} ; do
[[ -e "$dir" ]] && exit 1
done
for i in {a..f} ; do
dd if=/dev/random of=verbose_test/"$i" count=1000 bs=1 &> /dev/null
done
echo -e "y\nn\ny\nn\ny\n" | rmd -vv -i verbose_test/* | grep '3.00 kb freed' || exit 1
echo "Done"