Last active
September 13, 2025 05:58
-
-
Save YuanLiou/32c89f40af7d0738ff8a1f50c331278d to your computer and use it in GitHub Desktop.
organize_posix.sh
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/sh | |
| # --- 設定區 --- | |
| # 目標資料夾就是目前的資料夾 | |
| 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 迴圈遍歷目標資料夾中的每一個項目 | |
| # 萬用字元展開 (globbing) 是 POSIX 標準功能 | |
| # 注意: 如果資料夾為空,"$TARGET_DIR"/* 會保持原樣,需要額外處理 | |
| for file in "$TARGET_DIR"/* | |
| do | |
| # 步驟 3: 判斷目前處理的項目是否為一個 "檔案" (-f) | |
| # 這樣可以避免我們移動到資料夾 | |
| if [ -f "$file" ]; then | |
| # 取得檔案的基本名稱(不含路徑) | |
| filename="$(basename "$file")" | |
| # 步驟 4: 使用 case 判斷式,根據檔案名稱 (副檔名) 決定要移到哪裡 | |
| case "$filename" in | |
| *.jpg|*.png|*.gif) | |
| echo "移動圖片檔案: $filename" | |
| mv "$file" "$TARGET_DIR/圖片/" | |
| ;; | |
| *.pdf|*.docx|*.txt) | |
| echo "移動文件檔案: $filename" | |
| mv "$file" "$TARGET_DIR/文件/" | |
| ;; | |
| *.zip|*.rar|*.gz) | |
| echo "移動壓縮檔案: $filename" | |
| mv "$file" "$TARGET_DIR/壓縮檔/" | |
| ;; | |
| *.mp4) | |
| echo "移動影片檔案: $filename" | |
| mv "$file" "$TARGET_DIR/影片/" | |
| ;; | |
| *) | |
| # `*` 代表除了上述條件以外的所有情況 | |
| # 我們把整理腳本自己也排除掉,避免它把自己移動了 | |
| if [ "$filename" != "$SCRIPT_NAME" ]; then | |
| echo "移動其他檔案: $filename" | |
| mv "$file" "$TARGET_DIR/其他檔案/" | |
| fi | |
| ;; | |
| esac | |
| fi | |
| done | |
| echo "--- ✅ 檔案整理完成! ---" | |
| # 腳本結束 | |
| # 回傳值 0 表示成功執行 | |
| exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment