Skip to content

Instantly share code, notes, and snippets.

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

  • Save YuanLiou/32c89f40af7d0738ff8a1f50c331278d to your computer and use it in GitHub Desktop.

Select an option

Save YuanLiou/32c89f40af7d0738ff8a1f50c331278d to your computer and use it in GitHub Desktop.
organize_posix.sh
#!/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