如何用 kitty dnd kitten 在 shell 与 GUI 程序之间拖放文件(含跨 SSH) 📅 发布时间:2026/9/10 18:49:53 👁 浏览次数: 如何用 kitty dnd kitten 在 shell 与 GUI 程序之间拖放文件含跨 SSH【免费下载链接】kittyIf you live in the terminal, kitty is made for you! Cross-platform, fast, feature-rich, GPU based.项目地址: https://gitcode.com/GitHub_Trending/ki/kitty在终端里传递文件路径通常要手动复制粘贴文件本体在本地和远程机器之间来回搬运则要靠scp之类额外命令。kitty 的dndkitten 把这件事变成鼠标拖放在 shell 中把文件拖到 GUI 文件管理器或者反过来把文件拖进正在运行dndkitten 的终端窗口文件会被复制或移动到当前工作目录而且这条链路在 SSH 会话内同样有效可以直接在本地 kitty 窗口和远程主机之间拖文件。该功能基于 kitty 的拖放协议自 kitty 0.47.0 起提供见 dnd 协议文档。前提条件终端是 kitty 且版本不低于 0.47.0拖放的接收端是 GUI 文件管理器或另一个运行着dndkitten 的 kitty 窗口跨机器拖放时用 kitty 自带的kitten ssh建立 SSH 会话。从 shell 向 GUI 程序拖文件在要拖出的文件所在目录运行kitten dnd file-to-drag.xyz参数位置放一个或多个文件/目录路径。目录也可以直接传入会作为整棵目录树参与拖放。kitten 启动后窗口标题会变为Drag and drop表示已进入等待拖放状态。然后按住鼠标在窗口内拖动文件即被拖起放到 GUI 文件管理器或另一个运行了dndkitten 的窗口上即可放下。kitten 会把文件以text/uri-listMIME 类型提供因此任何支持接收该类型的文件管理器都能作为落点。按Esc或CtrlC可随时退出 kitten进行中的拖放会被取消。把文件从 GUI 拖进 shell在目标目录文件将落地的位置的 shell 窗口运行kitten dnd不带参数表示只接收不拖出。把 GUI 文件管理器或另一个dndkitten 窗口中的文件拖到这个 kitty 窗口并放下文件就会被复制到当前工作目录。窗口中提供 Copy 和 Move 两个拖放区域落在 Copy 区域执行复制落在 Move 区域执行移动。想改变落地目录可以在运行时加--drop-dest参数指定目录例如kitten dnd --drop-dest /tmp/incoming验证结果在目标目录中确认文件已出现且内容完整。本地移动时 kitten 会尽量使用硬链接而不是复制文件数据见下文--copy-mode。跨 SSH 在本地与远程机器之间拖放在本地 kitty 中用 kitty 的 ssh kitten 连入远程机器kitten ssh remote-computer-name在远程 shell 里运行 dnd kitten把要拖的文件作为参数kitten dnd files-or-dirs-to-drag现在可以直接在本地 kitty 窗口和这个远程窗口之间拖放文件数据经过终端传输不需要额外的 scp/rsync 步骤。两个必须知道的边界移动会删除源文件从该窗口拖出时如果执行的是 move 操作、且落点在另一台机器上被拖的文件和目录会从源端删除。只想保留源文件就用 Copy 区域或复制类操作。跨机器传输时终端只传输常规文件、符号链接和目录三类条目协议层面单段 payload 超过 4096 字节会自动分块传输m键分块对使用者是透明的。常用参数以下参数来自 dnd kitten 文档 与 kitten 源码参数作用--drag MIME:路径以指定 MIME 类型拖出文件可多次指定-或/dev/stdin表示从 STDIN 读取。例如image/jpeg:mypic.jpg--drop MIME:路径接收 drop 时把指定 MIME 的数据写入指定文件只写 MIME 不写路径则禁止接收该类型例如禁用text/plain--drop-dest 目录drop 数据的保存目录默认当前工作目录--copy-mode auto\|independent控制本地 Copy drop 的处理方式auto默认尽量用硬链接、必要时复制数据independent总是复制文件数据使被拖文件与源文件解耦。Move drop 总是尽量用硬链接--confirm-drop-overwrite当 drop 会覆盖已有文件时先询问确认仅对 text/uri-list 的文件冲突生效--drop-anywhere disallowed\|copy\|move允许拖到 Copy/Move 区域之外的位置并执行指定动作默认disallowed--drag-thumbnail 图片指定拖拽图标支持 PNG/JPEG/GIF/WEBP其他格式需要系统装有 ImageMagick不指定时根据被拖数据自动生成--drag-thumbnail-size拖拽图标尺寸上限默认 512过大的图片会被终端拒绝--exit-on 事件列表逗号分隔的退出事件drag-finish、drop-finish、esc-key默认esc-key。设置为drag-finish,drop-finish可在一次拖放完成后自动退出两个 stdin/stdout 的隐式行为值得注意启动时 STDIN 若已有数据会作为text/plain参与拖出拖入的text/plain数据如果 STDOUT 连接到了文件则写入该文件否则丢弃。限制与注意事项同一窗口内自拖自放会被终端以EPERM拒绝这是协议的安全设计防止恶意程序借拖放读取本机文件遇到该报错说明拖放源和落点在同一窗口换一个窗口作为落点即可。远端机器判定依赖机器 idLinux 下读取/etc/machine-id等见协议文档 Machine id 一节。如果机器 id 版本不被识别协议会按“不同机器”处理跨机器拖放仍可用。除了 kitty 自身目前支持该协议的终端程序还包括yazi和elio两个终端文件管理器见 dnd-protocol.rst 的 “Support in other software” 一节可以把 dnd 拖出的文件直接交给它们处理。完整的转义码格式OSC _dnd_code ; metadata ; payload ST、MIME 协商与目录句柄等细节见 docs/dnd-protocol.rst命令行参数完整说明见 docs/kittens/dnd.rst。【免费下载链接】kittyIf you live in the terminal, kitty is made for you! Cross-platform, fast, feature-rich, GPU based.项目地址: https://gitcode.com/GitHub_Trending/ki/kitty创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考