dramaling-app/tools/organize_file.sh

115 lines
2.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 檔案組織工具
# 用於快速歸類無法明確分類的檔案
show_help() {
echo "📁 檔案組織工具"
echo "==============="
echo ""
echo "用法: $0 [檔案名] [類型]"
echo ""
echo "類型選項:"
echo " temp - 臨時檔案 (放入 temp/)"
echo " archive - 歷史檔案 (放入 archive/今日日期/)"
echo " misc - 雜項檔案 (放入 misc/)"
echo " auto - 自動決定位置"
echo ""
echo "範例:"
echo " $0 test_script.sh temp"
echo " $0 old_config.json archive"
echo " $0 unknown_file.txt auto"
}
# 自動決策函數
auto_categorize() {
local file="$1"
local filename=$(basename "$file")
# 檢查檔案名模式
if [[ "$filename" =~ ^(test_|temp_|tmp_|debug_) ]]; then
echo "temp"
elif [[ "$filename" =~ ^(old_|backup_|archive_) ]]; then
echo "archive"
elif [[ "$filename" =~ \.(log|tmp|bak)$ ]]; then
echo "temp"
else
echo "misc"
fi
}
# 移動檔案函數
move_file() {
local file="$1"
local category="$2"
local dest_dir
case "$category" in
"temp")
dest_dir="temp"
;;
"archive")
dest_dir="archive/$(date +%Y-%m-%d)"
;;
"misc")
dest_dir="misc"
;;
*)
echo "❌ 未知的分類: $category"
return 1
;;
esac
# 創建目標目錄
mkdir -p "$dest_dir"
# 移動檔案
if mv "$file" "$dest_dir/"; then
echo "✅ 已移動 '$file' → '$dest_dir/'"
# 記錄移動
echo "$(date '+%Y-%m-%d %H:%M:%S') - Moved '$file' to '$dest_dir/' (category: $category)" >> "$dest_dir/.move_log"
else
echo "❌ 移動失敗: '$file'"
return 1
fi
}
# 主程序
main() {
if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
show_help
exit 0
fi
local file="$1"
local category="$2"
# 檢查檔案是否存在
if [ ! -f "$file" ]; then
echo "❌ 檔案不存在: $file"
exit 1
fi
# 如果沒有指定分類或指定為 auto則自動決定
if [ -z "$category" ] || [ "$category" = "auto" ]; then
category=$(auto_categorize "$file")
echo "🤖 自動分類為: $category"
fi
# 確認移動
echo "準備移動檔案:"
echo " 檔案: $file"
echo " 分類: $category"
echo ""
read -p "確認移動? (y/N): " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
move_file "$file" "$category"
else
echo "已取消"
fi
}
# 執行主程序
main "$@"