使用键盘复制终端中的路径

Raf*_*ffi 4 bash zsh grep command-line

我经常发现在使用命令行时,我需要复制最后一个命令的输出中出现的路径。例如我可能会find . | grep这样使用:

[user@localhost /tmp]$ find . | grep B
./directoryAB
./directoryBA
./directoryBB
./directoryBC
./directoryCB
Run Code Online (Sandbox Code Playgroud)

此时我需要拿起鼠标,复制我想要的路径,然后输入cd,然后粘贴。但如果我可以循环输出中的路径并仅使用键盘复制我想要的路径,那就太棒了。有什么可以帮助我做到这一点吗?

我使用 zsh 和 iTerm2,fwiw。

use*_*686 6

使用直接与生成输出的程序一起使用的工具来实现这一点更容易,而不是试图从已经打印的内容中刮取它。

有些工具可以显示交互式“选择项目”或“选择文件”提示,并设计为将其作为命令反馈到 shell 中。fzfbroot是两个例子。

fzf可以通过 stdin 接受任何输入,并让您交互式地过滤它,例如:

cd "$(find -type d | fzf)"
Run Code Online (Sandbox Code Playgroud)

这可以封装在 shell 函数中,或用作增强的 Tab-complete(fzf 中包含此功能的 Bash 代码),甚至绑定到自定义键盘快捷键,例如 Alt+D 通过 fzf 选择目录并将其插入在光标位置(我的aliases.sh有一个 Bash 的示例,尽管 Zsh 需要以非常不同的方式完成)。

broot另一方面是专门的文件树浏览器,但也被设计为通过 shell 函数包装器使用。

broot --print-shell-function >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

运行新创建的br函数将打开一个文件浏览器,在其中使用 Alt-Enter 选择文件夹将使父 shell 转到cd所选位置。