fast-clean 1.2.0

A tool for quickly clean the target dir
Documentation
# 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. 完整黑盒测试覆盖所有参数组合