这是一个用例:我使用
fzf
搜索目录列表,然后与 cd
命令一起使用:
cd $(fzf)
但是,
fzf
命令仅显示文件,而不显示目录。有没有办法指示 fzf
仅选择目录?
根据我的评论,您可以使用
find
生成目录列表:
cd $(find . -type d -print | fzf)
您可以调整
find
命令来限制目录的深度,或者只匹配特定名称的目录等
通常,您应该使用
fzf
作为过滤器,从某些外部命令获取输入。
本示例是在带有 zsh 的 unix 系统中,并假设所有相关文件都位于
~/code
中,因此请根据您自己的文件结构相应更改路径。命令的第一部分跳转到相关目录,因此,如果您不是从根目录工作,请确保将第一个 cd 命令从“~”更改为您自己的路径。
要使用 fzf finder 从任何 pwd 中在主工作目录(在本例中为 ~/code")中进行递归目录搜索,并且能够在选择时自动跳转到该目录:
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
alias f="cd ~ && cd \$(find ~/code -type d \( -name node_modules -o -name .git \) -prune -o -name '*' -type d -print | fzf)"
这个答案很棒,但有一点烦人的事情,我找到了解决它的方法
cd "./$(find -type d | fzf)"
当点击 ESC 或 CTRL+C fzf 返回
""
所以我在它前面添加 "./"
以在取消时保持当前目录。是的,如果您做出选择,它会从 cd
变为 ././dirname
,但这不是问题。