115 lines
2.7 KiB
Bash
Executable File
115 lines
2.7 KiB
Bash
Executable File
#!/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 "$@" |