Skip to content

Instantly share code, notes, and snippets.

@YuanLiou
Last active September 13, 2025 05:53
Show Gist options
  • Select an option

  • Save YuanLiou/9473746f64299e870ac3aad82b345b45 to your computer and use it in GitHub Desktop.

Select an option

Save YuanLiou/9473746f64299e870ac3aad82b345b45 to your computer and use it in GitHub Desktop.
#!/bin/bash
# --- 設定區 ---
# 目標資料夾就是目前的資料夾
TARGET_DIR="$(pwd)"
# --- 執行區 ---
SCRIPT_NAME="$(basename "$0")"
echo "--- 開始整理資料夾: $TARGET_DIR ---"
# 步驟 1: 預先建立好分類用的資料夾
# -p 參數: 如果資料夾已存在不會報錯,且會建立必要的父目錄
mkdir -p "$TARGET_DIR/圖片"
mkdir -p "$TARGET_DIR/文件"
mkdir -p "$TARGET_DIR/壓縮檔"
mkdir -p "$TARGET_DIR/影片"
mkdir -p "$TARGET_DIR/其他檔案"
# 步驟 2: 使用 for 迴圈遍歷目標資料夾中的每一個項目
# "$TARGET_DIR"/* 會展開成該資料夾下的所有檔案與資料夾名稱
# 這裡不用 ls,是因為 shell 的 for 迴圈可以直接用萬用字元展開(globbing)取得所有檔案與資料夾
for file in "$TARGET_DIR"/*
do
# 步驟 3: 判斷目前處理的項目是否為一個 "檔案" (-f)
# 這樣可以避免我們移動到資料夾
if [[ -f "$file" ]]; then
# 步驟 4: 使用 case 判斷式,根據檔案名稱 (副檔名) 決定要移到哪裡
case "$file" in
*.jpg|*.png|*.gif)
echo "移動圖片檔案: $file"
mv "$file" "$TARGET_DIR/圖片/"
;;
*.pdf|*.docx|*.txt)
echo "移動文件檔案: $file"
mv "$file" "$TARGET_DIR/文件/"
;;
*.zip|*.rar|*.gz)
echo "移動壓縮檔案: $file"
mv "$file" "$TARGET_DIR/壓縮檔/"
;;
*.mp4)
echo "移動影片檔案: $file"
mv "$file" "$TARGET_DIR/影片/"
;;
*) # `*` 代表除了上述條件以外的所有情況
# 我們把整理腳本自己也排除掉,避免它把自己移動了
if [[ "$(basename "$file")" != "$SCRIPT_NAME" ]]; then
echo "移動其他檔案: $file"
mv "$file" "$TARGET_DIR/其他檔案/"
fi
;;
esac
fi
done
echo "--- ✅ 檔案整理完成! ---"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment