很多人第一次用 FinalShell 传项目目录,习惯把本地文件夹直接拖进右侧文件面板,看到进度条走完就以为大功告成。真到服务器上执行才发现:目录在、文件不全,或者子目录是空的。问题往往不在工具本身,而在操作路径和预期不一致。下面按上传前、上传中、上传后,把常见坑拆开说。
坑一:拖拽只传了第一层,子目录被漏掉
FinalShell 的文件管理基于 SFTP。拖拽文件夹时,如果目标面板还停留在上一级目录,或拖拽过程中松手位置偏移,容易只创建目录、不递归上传内容。更稳妥的做法是:
- 先在右侧面板双击进入目标目录,确认路径栏显示的是最终位置;
- 再用“上传”按钮选择文件夹,而不是只靠拖拽;
- 上传时盯一眼传输队列,确认文件数量与本地一致,别急着关窗口。
如果目录层级很深,建议先本地压缩再上传,减少逐个文件握手带来的中断概率。
坑二:中文名、空格和长路径导致中途报错
Windows 下常见的“新建文件夹 (2)”“项目资料 最终版”这类名称,在跨平台传输时可能触发编码或截断问题。表现是传到一半停住、个别文件 0 字节,或者服务器上出现乱码目录。
- 上传前把目录名改成英文、数字、下划线组合;
- 去掉名字里的空格、括号、#、& 等符号;
- 路径总长度尽量控制在 200 字符以内;
- 遇到报错不要反复重试同一个目录,先清掉服务器上的半成品再传。
坑三:隐藏文件和符号链接“看起来传了,其实没传”
以点开头的配置文件、.git 目录、软链接,在文件面板里有时不显示或显示为普通文件。传完发现程序起不来,多半是漏了 .env、.config 这类文件。
- 上传前在本地确认隐藏文件清单;
- 不要依赖面板的“全选”,先显示隐藏项再核对;
- 符号链接建议在服务器端重建,不要指望跨平台原样保留;
- 项目目录优先打包成 tar.gz,压缩包内不会漏隐藏文件。
坑四:权限和属主不对,传上去也读不了
用普通账号登录,上传到 /var/www、/opt 这类目录时,文件属主是登录用户,Web 服务或运行账号可能没有读权限。常见现象是 403、Permission denied。
- 先传到用户家目录或 /tmp,再通过 sudo mv 移到目标位置;
- 解压后用 chown -R 应用账号:应用组 目标目录 修正属主;
- 目录给 755、文件给 644,不要图省事直接 777;
- 上传前用 df -h 和 df -i 看一眼磁盘空间与 inode,别等传到 99% 才失败。
坑五:大目录硬传,慢且容易断
几万个小文件逐个走 SFTP,速度慢、易断,断点续传也不一定可靠。更稳的顺序是:
- 本地打包:tar -czf project.tar.gz project;
- 上传压缩包,比传整个目录快得多;
- 在服务器上校验:sha256sum project.tar.gz,与本地对比;
- 解压:tar -xzf project.tar.gz -C /目标路径;
- 需要覆盖时先备份旧目录,别直接解压盖上去。
命令行兜底:scp 和 rsync 什么时候更合适
如果 FinalShell 面板反复中断,可以打开它自带的终端,用命令行完成同样的事。scp -r 适合一次性小目录;rsync -avz --progress 适合大目录和增量同步,断线后重跑只补差异。注意 rsync 末尾斜杠的含义:源路径带斜杠是“传目录里的内容”,不带斜杠是“连目录本身一起传”,这一点最容易传错层级。
上传后的三步自检
- 数量核对:本地 find . -type f | wc -l,服务器同命令对比;
- 关键文件抽查:配置文件、入口脚本、静态资源各抽一个打开;
- 权限与属主检查:ls -l 看属主,确认运行账号能读能执行。
把这几步固定成习惯,比事后排查“为什么页面 404”省事得多。