file-organizer
npx skills add https://github.com/akira82-ai/file-organizer --skill file-organizer
Agent 安装分布
Skill 文档
File Organizer Skill
åºäº AI è¯ä¹åæçæºè½æä»¶æ´çæè½ï¼æ ¹æ®æä»¶å 容卿å建åç±»ã
æ ¸å¿ç¹æ§
| ç¹æ§ | 说æ |
|---|---|
| åç±»æ¹å¼ | AI åææä»¶åè¯ä¹ï¼å¨æçæåç±» |
| äº¤äºæ¨¡å¼ | AskUserQuestion è¯¢é®æº/ç®æ ç®å½ |
| ç¨æ·ç¡®è®¤ | æ¾ç¤ºå类计ååçå¾ ç¡®è®¤ |
| ç®æ ä¼å | ä¼å 使ç¨ç®æ ç®å½ç°æåç±» |
| é¶èæ¬ | 纯 Bash + AI åæï¼æ Python èæ¬ |
è°ç¨æ¹å¼
# 宿´è°ç¨
/organize --source ~/Downloads --target ~/Documents/Archives
# ç®å
/organize ~/Downloads ~/Documents/Archives
# ä»
æå®æºç®å½ï¼è¯¢é®ç®æ ç®å½
/organize ~/Downloads
# 交äºå¼è¯¢é®ä¸¤ä¸ªç®å½
/organize
Johnny Decimal åç±»æ å
æ å1ï¼åºååååå
å°ææå 容æä¸»é¢åå为 10 个è¿ç»çåºåï¼00-09, 10-19, …, 90-99ï¼ï¼æ¯ä¸ªåºåå å«ä¸ä¸ªä¸»è¦é¢åæç±»å«ï¼ç¡®ä¿å 容ææç¡®å½å±ã
æ å2ï¼ç¼å·è§åè§è
éç¨ XX.YY æ ¼å¼çåç±»å·ï¼å
¶ä¸ï¼
- XXï¼ä¸¤ä½æ´æ°ï¼ï¼è¡¨ç¤ºåºåå ç主åç±»ï¼00-99ï¼
- YYï¼ä¸¤ä½å°æ°ï¼ï¼è¡¨ç¤ºè¯¥åç±»ä¸çå ·ä½é¡¹ç®ï¼00-99ï¼
æ å3ï¼å¯æ©å±æ§è®¾è®¡
éè¿æ·»å é¢å¤å°æ°ä½å®ç°æ éç»åï¼å¦ 10.01.01, 20.03.02.01ï¼ï¼ä¿æå±çº§æ¸
æ°çåæ¶æ¯æå
容ç䏿æ©å±ã
æ å4ï¼å½åè§èç»ä¸
æä»¶/æä»¶å¤¹å½åéç¨ [åç±»ID]_[æè¿°æ§åç§°]_[å¯éä¿¡æ¯] æ ¼å¼ï¼å©ç¨èªç¶æåºç¹æ§ï¼æ éæå¨è°æ´é¡ºåºã
æ å5ï¼åºå®ä½ç½®æ å°
æ¯ä¸ªåç±»å·å¯¹åºå¯ä¸çç©çä½ç½®ï¼æä»¶å¤¹/ç®å½ï¼ï¼å½¢æç¨³å®ç ID-ä½ç½®æ å°å ³ç³»ï¼ä¾¿äºå¿«éå®ä½åæ£ç´¢ã
å类示ä¾
00-09_ç³»ç»é
ç½®/
10-19_ææ¡£èµæ/
10.01_æ¥åææ¡£/
10.02_ä¼è®®è®°å½/
20-29_å¾çåªä½/
20.01_æªå¾/
20.02_设计å¾/
30-39_代ç 项ç®/
30.01_Python项ç®/
30.02_å端项ç®/
...
æ§è¡æµç¨
1. è§£æåæ°
æ£æ¥ç¨æ·æ¯å¦æä¾äºæºç®å½åç®æ ç®å½åæ°ã
2. ç¡®å®æºç®å½ï¼å¦æªæå®ï¼
ä½¿ç¨ AskUserQuestion 询é®ç¨æ·ï¼æä¾å¸¸ç¨ç®å½é项ã
3. ç¡®å®ç®æ ç®å½ï¼å¦æªæå®ï¼
ä½¿ç¨ AskUserQuestion 询é®ç¨æ·ï¼æä¾å¸¸ç¨ç®å½é项ã
4. æ«æç®æ ç®å½
ls -la "$target"
- æ£æ¥æ¯å¦å·²æåç±»ç®å½
- 妿ï¼è®°å½ç°æåç±»å表ä¾åç»å¹é
5. æ«ææºæä»¶
ls -1 "$source"
- è·åæææä»¶å表
- è·³è¿éèæä»¶ï¼ä»¥
.å¼å¤´ï¼
6. AI åæå¹¶çæåç±»
å¦æç®æ ç®å½æåç±»ï¼å°æä»¶å¹é å°ç°æåç±»
å¦æç®æ ç®å½æ åç±»ï¼AI åææææä»¶åï¼å¨æå建åç±»
éè¦ï¼çæçåç±»åç§°å¿
须带ç¼å·åç¼ï¼æ ¼å¼ä¸º ç¼å·_ç±»å«åç§°
- ç¼å·ä½¿ç¨ Johnny Decimal æ ¼å¼ï¼
01-01,01-02,02-01,10-05ç - ç¼å·ä¸ç±»å«åç§°ä¹é´ç¨ä¸å线
_åé - ç±»å«åç§°å¯ä»¥ä½¿ç¨ä¸ææè±æï¼å 许å å«ä¸å线
ç¼å·éå¢è§åï¼å ³é®ï¼ï¼
- 主åç±»ç¼å·ï¼ç¬¬ä¸é¨åï¼ï¼æ ¹æ®ä¸»é¢é¢åéå¢
- åä¸å¤§ç±»ä¸»é¢ä¸çææååç±»å ±äº«ç¸åç主åç±»ç¼å·
- ä¾å¦ï¼ææææ¯ç¸å
³ç¨
01-XXï¼ææåä¸ç¸å ³ç¨02-XXï¼ææè¡ä¸ç¸å ³ç¨03-XX - æ¯ä¸ªä¸»åç±»ç¼å·æå¤å
å« 99 个ååç±»ï¼
01-01å°01-99ï¼ - å½åç°ä¸åç主é¢é¢åæ¶ï¼å¿ é¡»éå¢ä¸»åç±»ç¼å·
- ååç±»ç¼å·ï¼ç¬¬äºé¨åï¼ï¼å¨åä¸ä¸»é¢é¢åå
æé¡ºåºéå¢ï¼
01,02,03…ï¼
示ä¾ï¼
01-01_人工æºè½ææ¯ # ææ¯é¢å
01-02_ç½ç»å®å
¨ # ææ¯é¢å
01-03_ç¼ç¨å¼å # ææ¯é¢å
02-01_éèç»æµ # åä¸é¢åï¼æ°ä¸»é¢ï¼ä¸»ç¼å·éå¢ï¼
02-02_æ¶è´¹é¶å® # åä¸é¢å
02-03_åä¸ç®¡ç # åä¸é¢å
03-01_æè²å¹è® # è¡ä¸é¢åï¼æ°ä¸»é¢ï¼ä¸»ç¼å·åéå¢ï¼
03-02_å»çå¥åº· # è¡ä¸é¢å
åç±»ååï¼
- æ ¹æ®æä»¶åçè¯ä¹ç¸ä¼¼æ§åç»
- å è¯å«ä¸»é¢é¢åï¼ææ¯/åä¸/è¡ä¸/娱ä¹çï¼ï¼åç»åå ·ä½ç±»å«
- åç±»åç§°ç®æ´æäºï¼ä¸ææè±æï¼
- æ¯ä¸ªåç±»å å«ç¸å ³èçæä»¶
- ä¼å è¯å«å¸¸è§æ¨¡å¼ï¼ä»£ç ãææ¡£ãå¾çãå缩å çï¼
7. æ¾ç¤ºå类计å
æ ¹æ®æ¥éª¤ 6 çæçåç±»ï¼åç¨æ·å±ç¤ºæ´ç计åã
ç¤ºä¾æ ¼å¼ï¼ä½¿ç¨å®é åéï¼ï¼
ð æºç®å½: $source (13 个æä»¶)
ð ç®æ ç®å½: $target (æ°å»ºåç±»)
âââââââââââââââââââââââââââââââââââââââââââââââââââââââ
ð 01-01_å¦ä¹ èµæ (3 files)
âââ å¦ä¹ ç¬è®°Python.pdf
âââ 课ç¨è§é¢.mp4
âââ æç¨.md
ð» 01-02_代ç é¡¹ç® (2 files)
âââ Reactç»ä»¶.tsx
âââ script.py
ð¦ 01-03_å缩å¤ä»½ (2 files)
âââ backup.zip
âââ archive.tar.gz
âââââââââââââââââââââââââââââââââââââââââââââââââââââââ
宿åç®å½å°èªå¨æ´æ°ä¸ºï¼01-01[03]å¦ä¹ èµæ çæ ¼å¼
注æï¼ æ¾ç¤ºæ¶ä½¿ç¨å®é
ç $source å $target åéå¼ï¼ä¸è¦ç¡¬ç¼ç è·¯å¾ã
8. ç¨æ·ç¡®è®¤ï¼å¿ é¡»ï¼
ä½¿ç¨ AskUserQuestion è¯¢é®æ¯å¦æ§è¡ï¼
- å¿ é¡»çå¾ ç¨æ·ç¡®è®¤åæè½æ§è¡ç§»å¨æä½
9. å建ç®å½ç»æ
æ ¹æ®æ¥éª¤ 6 çæçåç±»ï¼å¨æå建ç®å½ã
æ ¼å¼ï¼ $target/ç¼å·_ç±»å«åç§°
示ä¾ï¼æ ¹æ®å®é åç±»å¨æå建ï¼ï¼
# å设 AI çæçå类为ï¼
# - 01-01_Claudeç¸å
³
# - 01-02_AI综ååºç¨
# - 01-03_代ç 项ç®
mkdir -p "$target/01-01_Claudeç¸å
³"
mkdir -p "$target/01-02_AI综ååºç¨"
mkdir -p "$target/01-03_代ç 项ç®"
注æï¼ å¿
é¡»ä½¿ç¨ $target åéï¼ä¸è¦ç¡¬ç¼ç è·¯å¾ã
10. æ§è¡ç§»å¨æä½
ä½¿ç¨ Bash å½ä»¤æ¹éç§»å¨æä»¶å°å¯¹åºåç±»ç®å½ã
11. æ´æ°åç±»ç®å½åç§°
卿ææä»¶ç§»å¨å®æåï¼ç»è®¡æ¯ä¸ªåç±»çæä»¶æ°éï¼å¹¶æ´æ°ç®å½åç§°æ ¼å¼ã
æ ¼å¼ï¼ ç¼å·[æ°é]ç±»å«åç§°
- ç¼å·ï¼Johnny Decimal æ ¼å¼ï¼å¦
01-01,01-10ï¼ - [æ°é]ï¼ä¸¤ä½æ°è¡¥é¶ï¼å¦
[07],[28]ï¼ - ç±»å«åç§°ï¼è¯ä¹åçåç±»åç§°
# 为æ¯ä¸ªåç±»ç®å½éå½åï¼æ·»å æä»¶æ°é
# åå§ç®å½åç§°æ ¼å¼ä¸º "ç¼å·_ç±»å«åç§°"ï¼éå½å为 "ç¼å·[æ°é]ç±»å«åç§°"
echo "ð æ£å¨æ´æ°åç±»ç®å½åç§°..."
for dir in "$target"/*/; do
dir_path="$dir"
dir_name=$(basename "$dir_path")
# è·³è¿éç®å½æä»¶
[[ ! -d "$dir_path" ]] && continue
# æåç¼å·åç±»å«åç§°ï¼åå§æ ¼å¼ "ç¼å·_ç±»å«åç§°"ï¼
if [[ "$dir_name" =~ ^([0-9]{2}-[0-9]{2})_(.+)$ ]]; then
number="${BASH_REMATCH[1]}"
category="${BASH_REMATCH[2]}"
# ç»è®¡æä»¶æ°éï¼åªç»è®¡æä»¶ï¼ä¸å
æ¬åç®å½ï¼
count=$(find "$dir_path" -maxdepth 1 -type f | wc -l | tr -d ' ')
# æ ¼å¼åæ°éä¸ºä¸¤ä½æ°è¡¥é¶
printf -v count_padded "%02d" "$count"
# æ°ç®å½åç§°ï¼ç¼å·[æ°é]ç±»å«åç§°
new_name="${number}[${count_padded}]${category}"
# éå½åç®å½
mv "$dir_path" "$target/$new_name"
echo " â $dir_name â $new_name"
else
echo " â ï¸ è·³è¿: $dir_name (æ ¼å¼ä¸ç¬¦å ç¼å·_ç±»å«åç§°)"
fi
done
echo "â
ç®å½åç§°æ´æ°å®æ"
12. è¾åºæ¥å
# æ£æ¥æºç®å½æ¯å¦æ¸
空
ls -1 "$source" | wc -l
# æ¾ç¤ºååç±»æä»¶æ°ï¼ç®å½åç§°å·²å
嫿°éï¼
echo ""
echo "ð åç±»ç»è®¡ï¼"
for dir in "$target"/*/; do
dir_name=$(basename "$dir")
echo " $dir_name"
done
ææ¯è¯´æ
- æä»¶åè¯ä¹åæä¸ä¾èµæ©å±å
- æ¯æä¸æåè±ææä»¶å
- 卿çæåç±»ï¼æ åºå®æ¨¡æ¿
- ä¼å å¹é ç®æ ç®å½ç°æåç±»
- èªå¨å建ä¸åå¨çç®å½ç»æ
- è·³è¿éèæä»¶ï¼
.å¼å¤´ï¼