# dde-filemanger-fnos **Repository Path**: humanfans/dde-filemanger-fnos ## Basic Information - **Project Name**: dde-filemanger-fnos - **Description**: Deepin 桌面文件管理器上飞牛扩展 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-09 - **Last Updated**: 2026-08-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 上传到飞牛 (fnnas-uploader) DDE 文件管理器右键菜单扩展:将选中的文件/目录通过 SMB 上传到飞牛 NAS (fnOS)。 ## 功能特性 - **右键上传**:右键文件/目录(支持多选)→「上传到飞牛」→ 弹窗输入目标目录 → 上传 - **智能目录创建**:目标目录自动逐级创建;目录整体上传时保留本地目录结构 - **路径支持**:支持中文文件名、含空格路径、嵌套目录 - **连接管理**:服务器地址/用户名/密码三步输入,自动列出共享供选项选择,并设置默认保存路径 - **便捷体验**:上传时预填默认路径可修改 - **状态反馈**:上传结果通过系统通知反馈;详细日志保存在 `~/.config/fnnas-uploader/upload.log` ## 菜单结构 ``` 上传到飞牛 ├── 选择目录并上传... → fnnas-upload.sh upload %F └── 连接设置... → fnnas-upload.sh config ``` ## 安装方式 ### 用户级安装(无需 root) ```bash ./install.sh ``` 安装内容: - 菜单配置 → `~/.local/share/deepin/dde-file-manager/context-menus/fnnas-upload.conf` - 上传脚本 → `~/.local/share/fnnas-uploader/scripts/fnnas-upload.sh` 菜单约 300ms 自动生效;若未出现,重启文件管理器: ```bash killall dde-file-manager 2>/dev/null; dde-file-manager & ``` 卸载:`./uninstall.sh` ### deb 包安装(推荐) ```bash # 构建(项目根目录,需要 dpkg-dev debhelper) dpkg-buildpackage -uc -us -b # 产物:../fnnas-uploader_1.0.0-1_all.deb # 安装 / 卸载 sudo dpkg -i fnnas-uploader_1.0.0-1_all.deb sudo dpkg -r fnnas-uploader ``` deb 包将菜单配置安装到系统级 `/usr/share/applications/context-menus/`,脚本安装到 `/usr/share/fnnas-uploader/scripts/`。安装 deb 前建议先卸载用户级安装(否则用户级配置优先级更高,会遮蔽系统级)。 ## 依赖 - `smbclient`(samba-client 包) - `zenity`(Deepin 自带) - `notify-send`(libnotify-bin) ```bash sudo apt install smbclient zenity libnotify-bin ``` ## 使用说明 1. 右键任意文件/目录 →「上传到飞牛」→「连接设置...」,按步骤填写: - 服务器地址(如 `192.168.1.38`) - 用户名(留空表示匿名访问) - 密码 - 连接成功后自动列出服务器上的共享,从**选项列表**中选择默认保存共享 - 输入该共享内的默认保存目录(留空 = 共享根目录) 2. 右键目标文件 →「上传到飞牛」→「选择目录并上传...」 3. 弹窗预填默认保存路径,可修改(留空 = 共享根目录),确定后开始上传 ## 配置与日志 - 连接配置:`~/.config/fnnas-uploader/config`(权限 600,含明文密码,请勿共享) - 日志:`~/.config/fnnas-uploader/upload.log` 也可手动编辑 config: ```ini SERVER=192.168.1.38 SHARE=ywk PORT=445 USER=james PASSWORD=*** DEFAULT_TARGET=/备份 ``` `DEFAULT_TARGET` 为默认保存路径(共享内目录,可留空)。 ## 技术说明 - 采用 dde-file-manager 的 Custom Menu Script 扩展机制(零 C++ 编译,配置 + 脚本即可),规范见 dde-file-manager `docs/extension/01-custom-menu-script.md` - 上传通过 smbclient 交互式 stdin 命令流实现: - 目标目录逐级 `mkdir`(已存在自动复用) - 每个文件先 `lcd` 到本地父目录再 `put basename`(smbclient 的 put 不接受本地绝对路径) - 目录递归:阶段 1 去重建目录,阶段 2 从共享根绝对导航后逐个上传 - 密码通过 `PASSWD` 环境变量传递,避免出现在进程列表 ## 项目结构 ``` fnnas-uploader/ ├── menus/ │ └── fnnas-upload.conf # 右键菜单配置 (__SCRIPTS_DIR__ 为路径占位符) ├── scripts/ │ └── fnnas-upload.sh # 上传/配置脚本(可被 source 做函数测试) ├── debian/ # deb 打包 (dpkg-buildpackage) │ ├── control # 包元信息与依赖 │ ├── rules # 安装规则 (sed 替换脚本路径占位符) │ ├── changelog │ ├── copyright # GPL-3.0-or-later │ └── source/format # 3.0 (native) ├── install.sh # 用户级安装 ├── uninstall.sh # 用户级卸载 └── README.md ``` ## 开发与验证 ```bash # 语法检查 bash -n scripts/fnnas-upload.sh # 函数级测试(脚本含 source guard,可作函数库) SERVER=192.168.1.38 USER=james PASSWORD=*** PORT=445 \ source scripts/fnnas-upload.sh && list_shares # 无弹窗上传测试(FNNAS_TARGET 跳过 zenity) FNNAS_TARGET=/测试目录 scripts/fnnas-upload.sh upload 文件1 目录2 # 打包 dpkg-buildpackage -uc -us -b ``` ## 许可证 GPL-3.0-or-later,详见 `debian/copyright`。 ## 更新日志 **1.0.0 (2026-08-09)** - 右键菜单「上传到飞牛」:选择目录并上传 / 连接设置 - 连接向导:服务器/用户名/密码 + 自动列出共享选择 + 默认保存路径 - SMB 上传:目录递归、中文/空格路径、目标目录自动创建 - deb 打包支持