如何对文件和文件夹进行命令行补全

如何对文件和文件夹进行命令行补全

作为一名新的 Linux 用户,让我远离命令行 (CL) 的原因之一是,对于涉及文件和文件夹(即所有内容!)的任务,所涉及的键入量使得使用 CL 效率低下。我本人倾向于使用详细的文件名。例如,如果我有一本名为“初等微分方程和边界值问题”的书,这是第 9 版,由 William Boyce 和 Richard DiPrima 撰写,那么我将其命名为:

elementary_differentail_equations_and_boundary_value_problems_9ed_boyce_diprima.pdf

因此,在我努力学习使用 CL 的过程中,我四处寻找克服这个问题的方法,并发现了命令行补全Tab钥匙。这样做的问题是它可以完成单词补全,但仅限于命令,而不是文件和文件夹。我想知道是否有类似的功能适用于文件?

答案1

我使用bash,并且在 上tab,文件名补全也会发生。

但对于您所采取的具体示例 - 长文件名,如果目录中有许多具有相同前缀的文件,许多 tab需要 s 才能访问该文件!

我在使用的一个代码库中遇到了类似的问题,我为自己创建的解决方法是,有一个alias+ Perl 脚本组合,我只给出第一个字母,在文件名中。例如,

$ ls
elementary_differentail_equations.pdf # 1
elementary_differentail_equations_and_boundary_value_problems.pdf # 2
elementary_differentail_equations_and_boundary_value_problems_9ed_boyce_diprima.pdf # 3

$ opdf e d e                      # opens 1
$ opdf e d e a b v p              # opens 2
$ opdf e d e a b v p 9 b d        # opens 3

其中opdf是别名(比如说),它只查找.pdf扩展名。

答案2

当使用 Bash 及其通过键执行补全的功能时Tab,补全有两个方面可能会令人困惑。

当您在提示符下键入一个字母并开始点击 时Tab,您会注意到您所描述的行为。

例子

$ 埃尔Tab

el4-rpmlint  el5-rpmlint  elbadmin     elfedit      elif    elinks    else

这是搜索您的系统$PATH并显示符合您的搜索条件的可执行文件,即el.

但是,如果您有一个如下所示的文件目录,则可以通过Tab如下方式使用相同的完成功能。

示例文件:

$ ls -1
efile.pdf
elementary_differentail_equations_and_boundary_value_problems_9ed_boyce_diprima.pdf
elements1.pdf

例子

执行此操作:

$ ls 埃尔Tab

Bash 会自动完成这个单词element。此时它将停止,因为这是当前目录中一组文件(或单个文件)中常见的最大字符串。如果你Tab现在点击两次,Bash 将列出到目前为止匹配的文件:

$ ls elementelementary_ TabTab Differentail_equations_and_boundary_value_problems_9ed_boyce_diprima.pdf elements1.pdf

$ ls 元素

然后它会将您带回到提示中的同一位置。ls element*在那一刻,Bash 基本上为你做了一些事情。如果您输入一两个字母来帮助引导 Bash 从它提供给您的子集中找到您想要的文件,然后Tab再次点击,它会尝试将您的更多文件与您现在在提示符处显示的扩展字符串进行匹配:

$ ls元素Tab

足以让您获得文件名的其余部分:

$ ls Primary_ Differentail_equations_and_boundary_value_problems_9ed_boyce_diprima.pdf

答案3

对于您真正想要实现的目标的问题的详细信息,另一种方法是:减少打字。

您可能还会发现,好的别名可以让您两全其美,即长文件夹名称。我喜欢长文件夹名称,也喜欢用于输入的短名称,我通过别名来实现这一点,例如:

alias zab='cd ~/mycar/activerecord-boolean-converter'
alias q='cd ~/Dropbox/95_2014/work/code/ruby__rails/ruby/ruby_quiz'
alias dummy='cd ~/zipcar/zipcar-rails-core/spec/dummy'

然后我只需输入,例如,q然后按return

相关内容