# Clean — Rust 文件清理工具
```
Usage: fast-clean [OPTIONS] -d <DIR>
Options:
-d <DIR> 目标文件夹
--fd <FILTER_DIR> 过滤的文件夹
--ext <FILE_EXT> 过滤的扩展名
--day <DAY> 过滤的天数(超过此天数才被删除)
--size <SIZE> 过滤大小(超过此大小才被删除)
--skip_dir 是否删除空文件夹
--is_test 是否是测试
-h, --help Print help
```
## 使用示例
### 清理下载文件夹
我们想要清理下载文件夹,但是内部几个文件夹不想删除,并且只想要删除三天前的文件
```
#!/usr/bin/env bash
########################################
# 固定业务参数
########################################
BASE_DIR="/home/freeman/Downloads"
FILTER_DIRS=(
"i4ToolsDownloads"
"wps"
)
FILE_EXTS=(
"png"
)
DAY="3"
SIZE=""
########################################
# 组装参数数组
########################################
ARGS=(-d "$BASE_DIR")
for fd in "${FILTER_DIRS[@]}"; do
ARGS+=(--fd "$fd")
done
for ext in "${FILE_EXTS[@]}"; do
ARGS+=(--ext "$ext")
done
if [[ -n "$DAY" ]]; then
ARGS+=(--day "$DAY")
fi
if [[ -n "$SIZE" ]]; then
ARGS+=(--size "$SIZE")
fi
########################################
# 第一次调用
########################################
./core/fast-clean "${ARGS[@]}" --is_test
RET=$?
if [[ $RET -eq -1 ]]; then
echo "Preview failed."
exit 1
elif [[ $RET -eq 1 ]]; then
exit 0
fi
########################################
# 用户确认
########################################
echo ""
read -p "Confirm delete? (y/Y/yes): " confirm
case "$confirm" in
[yY] | [yY][eE][sS])
echo "Confirmed."
;;
*)
echo "Canceled."
exit 0
;;
esac
########################################
# 第二次调用(真实删除)
########################################
./core/fast-clean "${ARGS[@]}"
```
### 删除指定格式图片
删除图片文件夹,想要指定删除png格式,但是也有几个文件夹不想删除
```
#!/usr/bin/env bash
########################################
# 固定业务参数
########################################
BASE_DIR="/home/freeman/Private/Pictures"
FILTER_DIRS=(
"Photo-In-Github"
"Important"
)
FILE_EXTS=()
DAY="3"
SIZE=""
########################################
# 组装参数数组
########################################
ARGS=(-d "$BASE_DIR")
for fd in "${FILTER_DIRS[@]}"; do
ARGS+=(--fd "$fd")
done
for ext in "${FILE_EXTS[@]}"; do
ARGS+=(--ext "$ext")
done
if [[ -n "$DAY" ]]; then
ARGS+=(--day "$DAY")
fi
if [[ -n "$SIZE" ]]; then
ARGS+=(--size "$SIZE")
fi
########################################
# 第一次调用
########################################
./core/fast-clean "${ARGS[@]}" --is_test
RET=$?
if [[ $RET -eq -1 ]]; then
echo "Preview failed."
exit 1
elif [[ $RET -eq 1 ]]; then
exit 0
fi
########################################
# 用户确认
########################################
echo ""
read -p "Confirm delete? (y/Y/yes): " confirm
case "$confirm" in
[yY] | [yY][eE][sS])
echo "Confirmed."
;;
*)
echo "Canceled."
exit 0
;;
esac
########################################
# 第二次调用(真实删除)
########################################
./core/fast-clean "${ARGS[@]}"
```
## 更新日志
### V1.2
1. 优化退出逻辑,添加退出码,帮助使用shell二次封装
2. 完善Cargo.toml
### V1.1
1. 使用策略模式优化过滤逻辑
2. 支持多文件拓展名过滤
3. 添加is_test参数,在run函数中可以直接构造MockRemover
4. 支持 dry-run 模式,通过is_test(默认true)来判断是否执行
5. 文件大小单位支持,
### V1.0
1. 支持递归遍历目录
2. 支持按文件扩展名过滤
3. 支持按文件大小过滤(删除超过指定大小的文件)
4. 支持按文件修改时间过滤(超过 N 天)
5. 支持跳过指定目录
6. 支持是否删除目录
7. 支持 Mock 测试(不会真实删除文件)
8. 完整黑盒测试覆盖所有参数组合