如何使用fzf只搜索目录?

问题描述 投票:0回答:3

这是一个用例:我使用

fzf
搜索目录列表,然后与
cd
命令一起使用:

cd $(fzf)

但是,

fzf
命令仅显示文件,而不显示目录。有没有办法指示
fzf
仅选择目录?

bash fzf
3个回答
15
投票

根据我的评论,您可以使用

find
生成目录列表:

cd $(find . -type d -print | fzf)

您可以调整

find
命令来限制目录的深度,或者只匹配特定名称的目录等

通常,您应该使用

fzf
作为过滤器,从某些外部命令获取输入。


1
投票

本示例是在带有 zsh 的 unix 系统中,并假设所有相关文件都位于

~/code
中,因此请根据您自己的文件结构相应更改路径。命令的第一部分跳转到相关目录,因此,如果您不是从根目录工作,请确保将第一个 cd 命令从“~”更改为您自己的路径。

要使用 fzf finder 从任何 pwd 中在主工作目录(在本例中为 ~/code")中进行递归目录搜索,并且能够在选择时自动跳转到该目录:

  1. 直接在 bash 中运行
    cd ~ && cd $(find ~/code -type d \( -name node_modules -o -name .git \) -prune -o -name '*' -type d   -print | fzf)

请注意,我正在过滤掉所有 node_modules 和 .git 目录。您可以通过链接来添加

-o (or operator) -name dirToFilterOut

  1. 显然,您不想每次进行模糊目录搜索时都键入此内容。在 .zshrc 内,将此命令别名为简单的键绑定。在此示例中,我使用“f”,因此我所做的就是键入“f”并在 shell 中输入来调用它。请注意,与直接在终端中写入相比,您必须在 .zshrc 中转义更多字符(这需要花费最长的时间才能弄清楚),并且在进行更改后不要忘记获取 .zshrc 文件!

alias f="cd ~ && cd \$(find ~/code -type d \( -name node_modules -o -name .git \) -prune -o -name '*'  -type d -print | fzf)"


0
投票

这个答案很棒,但有一点烦人的事情,我找到了解决它的方法

cd "./$(find -type d | fzf)"

当点击 ESCCTRL+C fzf 返回

""
所以我在它前面添加
"./"
以在取消时保持当前目录。是的,如果您做出选择,它会从
cd
变为
././dirname
,但这不是问题。

© www.soinside.com 2019 - 2024. All rights reserved.