惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
D
DataBreaches.Net
F
Fortinet All Blogs
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
Apple Machine Learning Research
Apple Machine Learning Research
H
Help Net Security
M
MIT News - Artificial intelligence
美团技术团队
人人都是产品经理
人人都是产品经理
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The Cloudflare Blog
有赞技术团队
有赞技术团队
L
LangChain Blog
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 【当耐特】
S
SegmentFault 最新的问题
V
Visual Studio Blog
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
B
Blog
I
InfoQ

博客园 - Questions张

每次打开webstorm需要重新source才能找到node,Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.74.dylib vscode 的md文件,如何设置默认用Markdown插件打开 如何清理各种Linux系统的磁盘空间以及日志文件大文件等 如何科学的通过学习词根词缀快速扩大自己的词汇量 微信如何开通wx.getPhoneNumber权限 淘宝NPM镜像地址https://registry.npm.taobao.org不可用 iPhone上使用VLC app导入本地英语听力文件(支持定时关闭sleep timer功能) idea打开properties文件中文乱码问题 如何系统的学习AI相关的知识,进入到AI行业-grok的答案 MacOs解决rz waiting to receive.**B0100000023be50 iTerm2 中使用 `rz` 命令无法弹出文件选择窗口,以及正确配置 CentOs8中vi以及vim编辑中文乱码问题 Centos8的镜像仓库停服无法连接切换国内镜像源 curl: (7) Failed to connect to 127.0.0.1 port 1087 after 6 ms: Couldn't connect to server 白嫖claude code的100美元额度,anyrouter中转服务 git push报错remote: hooks/pre-receive:14:in require_relative' MacOs下todesk网络连接错误,无法登录 MacOs如何解决brew update卡住问题 Docker国内镜像加速配置 request to https://registry.npm.taobao.org/cyarn failed, reason: certificate has expired
iterm的rz命令只能选择文件夹不能选择文件的问题
Questions张 · 2025-09-06 · via 博客园 - Questions张

这个问题非常典型!当执行 `rz` 后弹出的选择窗口只能选文件夹而不能选文件时,几乎可以肯定是 **Zmodem 触发器脚本配置问题**。

核心原因是:**iTerm2 运行的脚本是旧版本或配置错误的版本,它错误地调用了选择目录的对话框,而不是选择文件的对话框。**

请按照以下步骤彻底解决:

### 方案一:检查和更新触发器脚本(最可能的原因)

旧的或来源不同的 `iterm2-recv-zmodem.sh` 脚本可能使用了错误的 AppleScript 命令。

1. **首先,找到你当前正在使用的脚本**。你之前在 iTerm2 的 Triggers 配置中设置了路径,通常是 `~/bin/iterm2-recv-zmodem.sh`。

2. **打开并编辑这个脚本**:
```bash
# 用 nano 或你喜欢的编辑器打开它
nano ~/bin/iterm2-recv-zmodem.sh
```

3. **检查关键部分**。脚本的核心是使用 `osascript` 执行 AppleScript 来弹出文件选择框。你需要找到类似下面的代码块:

**❌ 错误的代码(用于选择文件夹):**
```bash
osascript -e 'tell application "iTerm2" to choose folder with prompt "Choose a file to send"'
```
关键字是 `choose folder`,这只会让你选择文件夹。

**✅ 正确的代码(用于选择文件):**
```bash
osascript -e 'tell application "iTerm2" to choose file with prompt "Choose a file to send"'
```
关键字是 `choose file`,这才是用于选择文件的。

另一个更健壮的正确版本可能是:
```bash
#!/bin/bash
# Author:
# Description:
osascript -e 'tell application "iTerm2" to choose file with prompt "Choose a file to send"' | sed 's/:/\/g'
```

4. **修改并保存**。如果你的脚本中是 `choose folder`,请将其修改为 `choose file`,然后保存退出。

5. **立即测试**。重新连接到服务器,再次运行 `rz` 命令,现在弹出的应该就是文件选择对话框了。

---

### 方案二:直接替换为新版脚本(推荐)

如果不想手动修改,最稳妥的方法是直接下载一个已知工作正常的脚本版本。

1. **重新下载脚本**。可以使用下面这个经过验证的脚本内容:

```bash
# 备份旧脚本(可选)
mv ~/bin/iterm2-recv-zmodem.sh ~/bin/iterm2-recv-zmodem.sh.backup

# 创建新的脚本文件
nano ~/bin/iterm2-recv-zmodem.sh
```

2. **将以下内容完整地复制粘贴到新文件中**:

```bash
#!/bin/bash
#
# Description:
#

# OS X has no `gzexec` equivalent so we need to manually handle ZMODEM
# requests using the `rz` command. This script is invoked by iTerm2.
#
# iTerm2 Trigger regular expression: rz waiting to receive.\*\*B0100
# Action: Run Silent Coprocess ~/bin/iterm2-recv-zmodem.sh

# Check if rz is available
if ! command -v rz &> /dev/null; then
osascript -e 'display alert "ZMODEM Error" message "rz command not found. Please install lrzsz."'
exit 1
fi

# Use AppleScript to prompt user for a file to send
# Note: `choose file` is for files, `choose folder` is for directories
FILE=$(osascript -e 'tell application "iTerm2" to choose file with prompt "Choose a file to send"' 2>/dev/null)

# Check if user cancelled
if [ -z "$FILE" ]; then
# Send ZModem cancel sequence if user cancels the dialog
echo -e \\x18\\x18\\x18\\x18\\x18
sleep 1
echo -e \\x18\\x18\\x18\\x18\\x18
exit 1
fi

# Convert the Mac path (with colons) to a Unix path
# e.g., "Macintosh HD:Users:john:file.txt" -> "/Users/john/file.txt"
FILE=$(echo "$FILE" | sed 's/:/\/g' | sed 's/\/\//\//g')

# Check if the file exists and is readable
if [ ! -r "$FILE" ]; then
osascript -e "display alert \"ZMODEM Error\" message \"File not found or not readable: $FILE\""
exit 1
fi

# Send the file using rz
/usr/local/bin/rz --escape --binary --bufsize 4096 < "$FILE"
exit 0
```

3. **保存文件** (`Ctrl + O` -> `Enter` -> `Ctrl + X`),然后赋予执行权限:
```bash
chmod +x ~/bin/iterm2-recv-zmodem.sh
```

4. **确保 iTerm2 触发器中的路径指向这个新脚本**(检查 `Preferences -> Profiles -> Advanced -> Triggers`)。

---

### 方案三:检查 iTerm2 触发器正则表达式

极小的可能性,触发器正则表达式匹配到了错误的地方,导致调用了错误的脚本。请再次确认你的触发器配置:

* **对于 `rz` (接收/上传)**:
* **Regular Expression**: `rz waiting to receive.\*\*B0100`
* **Action**: `Run Silent Coprocess`
* **Parameters**: `~/bin/iterm2-recv-zmodem.sh` (确保路径绝对正确)

### 总结

| 问题现象 | 根本原因 | 解决方案 |
| :--- | :--- | :--- |
| `rz` 弹出**文件夹**选择框 | 触发器脚本 `iterm2-recv-zmodem.sh` 中使用了 `choose folder` 命令 | **编辑脚本**,将 `choose folder` 改为 `choose file` |
| 脚本文件损坏或版本过旧 | 脚本逻辑错误或功能不全 | **直接下载并替换**为上面提供的新版脚本 |

完成以上任一方案的修改后,**完全关闭并重新打开 iTerm2**,再次尝试 `rz` 命令,问题就应该解决了,现在可以正常选择文件了。