如何用inotify自动将下载文件分类至指定目录?(新手教程)
Hey Wolf, 我刚好折腾过类似的自动文件归类工具,用inotifywait+shell脚本就能搞定,全程傻瓜式操作,一步一步来:
用inotifywait实现下载文件自动归类完整指南
一、先安装必要工具
首先得装inotify-tools,不同系统命令不一样:
- Debian/Ubuntu系:
sudo apt update && sudo apt install inotify-tools - RHEL/CentOS系:
sudo dnf install inotify-tools(老版本用yum也可以) - macOS:先装Homebrew,然后
brew install inotify-tools
二、创建归类规则和脚本
先规划好你的文件夹结构,比如:
- 监控的下载目录默认是
~/Downloads - 目标文件夹提前建好:
~/Documents/银行对账单/工行账户~/Documents/银行对账单/建行账户~/Documents/发票/公司发票~/Documents/发票/个人发票
先把这些文件夹都创建好,避免脚本运行时报错。
- 监控的下载目录默认是
创建shell脚本,比如命名为
file-sorter.sh,放在~/scripts目录(没有的话先执行mkdir ~/scripts创建):
脚本内容如下,你可以根据自己的文件名前缀直接修改规则:#!/bin/bash # 定义要监控的下载目录 WATCH_DIR="$HOME/Downloads" # 定义各个目标文件夹路径 ICBC_DIR="$HOME/Documents/银行对账单/工行账户" CCB_DIR="$HOME/Documents/银行对账单/建行账户" COMPANY_INVOICE_DIR="$HOME/Documents/发票/公司发票" PERSONAL_INVOICE_DIR="$HOME/Documents/发票/个人发票" # 确保所有目标文件夹都存在(避免移动时出错) mkdir -p "$ICBC_DIR" "$CCB_DIR" "$COMPANY_INVOICE_DIR" "$PERSONAL_INVOICE_DIR" # 监控下载目录,只处理完全下载完成的文件(排除临时文件) inotifywait -m -e moved_to -e create --format "%f" "$WATCH_DIR" | while read FILENAME do # 只处理文件,跳过文件夹 if [ -f "$WATCH_DIR/$FILENAME" ]; then # 根据文件名前缀判断归类逻辑 case "$FILENAME" in "工行-"*) mv "$WATCH_DIR/$FILENAME" "$ICBC_DIR/" echo "已移动工行对账单: $FILENAME" ;; "建行-"*) mv "$WATCH_DIR/$FILENAME" "$CCB_DIR/" echo "已移动建行对账单: $FILENAME" ;; "公司发票-"*) mv "$WATCH_DIR/$FILENAME" "$COMPANY_INVOICE_DIR/" echo "已移动公司发票: $FILENAME" ;; "个人发票-"*) mv "$WATCH_DIR/$FILENAME" "$PERSONAL_INVOICE_DIR/" echo "已移动个人发票: $FILENAME" ;; # 可以添加更多规则,比如其他文件类型或前缀 *.pdf|*.xls|*.xlsx) # 这里可以设置默认归类,比如其他PDF/表格文件放到专属文件夹 # mv "$WATCH_DIR/$FILENAME" "$HOME/Documents/其他文件/" ;; *) # 不需要处理的文件留空即可 ;; esac fi done给脚本添加执行权限:
chmod +x ~/scripts/file-sorter.sh
三、测试脚本
先手动运行脚本:~/scripts/file-sorter.sh,然后下载一个带对应前缀的文件(比如命名为“工行-202406对账单.pdf”)到Downloads目录,看看是不是自动移到了对应的工行账户文件夹里。测试没问题就可以设置开机自启了。
四、设置开机自启(后台运行)
方法1:用systemd服务(Linux系统推荐)
- 创建systemd服务文件:
sudo nano /etc/systemd/user/file-sorter.service - 写入以下内容:
[Unit] Description=自动归类下载文件服务 After=graphical.target [Service] ExecStart=%h/scripts/file-sorter.sh Restart=always RestartSec=5 [Install] WantedBy=default.target - 保存退出(nano编辑器按
Ctrl+O回车保存,再按Ctrl+X退出) - 重新加载systemd配置:
systemctl --user daemon-reload - 设置开机自启:
systemctl --user enable file-sorter.service - 立即启动服务:
systemctl --user start file-sorter.service
方法2:桌面环境启动项(适合GNOME/KDE等桌面)
- 打开系统设置里的“启动应用程序”(不同桌面名字可能略有差异,比如KDE叫“自动启动”)
- 添加新条目:
- 名称:文件自动归类
- 命令:
/home/你的用户名/scripts/file-sorter.sh(替换成你的实际用户名路径) - 注释:自动将下载文件归类到对应专属文件夹
- 保存即可,下次开机就会自动后台运行。
五、注意事项
- 如果你的下载目录不是默认的
~/Downloads,记得修改脚本里的WATCH_DIR路径 - 文件名前缀要和脚本里的规则完全匹配,比如你的文件是
ICBC_开头,就把脚本里的"工行-"改成"ICBC_" - 如果遇到文件移动失败,检查目标文件夹的权限,确保你的用户有读写权限
- macOS用户如果要设置开机自启,可以用launchd配置plist文件,核心逻辑和脚本一致
这样整个流程就完成了,跟着步骤走完全没难度,有问题随时说!
内容的提问来源于stack exchange,提问作者herrdeh
相关产品推荐
相关产品推荐

