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. 完整黑盒测试覆盖所有参数组合