nab*_*nab 41 linux bash file-search
有没有人知道从linux控制台执行快速模糊搜索的方法?
当我需要在项目中找到文件但我不记得确切的文件名时,我常常遇到这种情况.在Sublime文本编辑器中,我将按Ctrl-P并键入名称的一部分,这将生成可供选择的文件列表.这是一个让我很满意的惊人功能.问题是在大多数情况下我必须通过ssh浏览远程机器上的控制台中的代码.所以我想知道是否有一个类似于Linux控制台的"Go Anywhere"功能的工具?
这些答案中的大多数不会像 sublime text 那样进行模糊搜索——它们可能会匹配答案的一部分,但它们并没有很好地“按此顺序查找所有字母”行为。
我认为这更接近你想要的。我整理了一个特殊版本的 cd ('fcd'),它使用模糊搜索来查找目标目录。超级简单——只需将其添加到您的 bashrc 中:
function joinstr { local IFS="$1"; shift; echo "$*"; }
function fcd { cd $(joinstr \* $(echo "$*" | fold -w1))* }
Run Code Online (Sandbox Code Playgroud)
这将在输入的每个字母之间添加一个 *,所以如果我想去,例如,
/home/dave/results/sample/today
Run Code Online (Sandbox Code Playgroud)
我可以只输入以下任何一项:
fcd /h/d/r/spl/t
fcd /h/d/r/s/t
fcd /h/d/r/sam/t
fcd /h/d/r/s/ty
Run Code Online (Sandbox Code Playgroud)
以第一个为例,这将执行cd /*h*/*d*/*r*/*s*p*l*/*t*并让 shell 找出实际匹配的内容。
只要第一个字符是正确的,并且在路径中的每个目录中写入一个字母,它就会找到你要找的东西。也许您可以根据自己的需要调整它?重要的一点是:
$(joinstr \* $(echo "$*" | fold -w1))*
Run Code Online (Sandbox Code Playgroud)
这将创建模糊搜索字符串。
我通常使用:
ls -R | grep -i [whatever I can remember of the file name]
Run Code Online (Sandbox Code Playgroud)
从我期望文件所在的上面的目录开始 - 在目录树中位置越高,速度就越慢。
当我找到确切的文件名时,我在查找中使用它:
find . [discovered file name]
Run Code Online (Sandbox Code Playgroud)
这可以折叠成一行:
for f in $(ls --color=never -R | grep --color=never -i partialName); do find -name $f; done
Run Code Online (Sandbox Code Playgroud)
(我发现 ls 和 grep 别名为“--color=auto”有问题)
find . -iname '*foo*'
Run Code Online (Sandbox Code Playgroud)
不区分大小写查找包含foo.
| 归档时间: |
|
| 查看次数: |
13777 次 |
| 最近记录: |