代码之家  ›  专栏  ›  技术社区  ›  corbacho

找到一个文件并打开它进行编辑。如何在bash shell中快速完成它?

  •  2
  • corbacho  · 技术社区  · 16 年前

    在Ubuntu或Drupal中配置LAMP或其他一些东西时,我经常会面临这个简单而重复的任务:

    我必须编辑一个配置文件(php.ini文件, httpd.conf文件, ... 不管怎样)经常,如果我记不住路径,我会运行以下两个命令:

    locate php.ini
    ------- typing manually one of the paths that are shown in the list...
    nano /etc/php5/apache2/php.ini
    

    有更好的方法吗?

    我喜欢用命令解决这个问题的方式 history :您可以使用 !32 locate 或 find

    6 回复  |  直到 16 年前
        1
  •  10
  •   Dennis Williamson    14 年前

    choose () {
        local PS3="Choose a file to edit: "
        select opt in $(locate "$1") quit
        do
            if [[ $opt = "quit" ]]
            then
                break
            fi
            ${EDITOR:-nano} "$opt"
        done
    }
    

    演示:

    $ choose php.ini
     1) /etc/php5/apache2/php.ini
     2) /etc/php5/apache2/php.ini.ucf-old
     3) /etc/php5/apache2/php.ini~
     4) /etc/php5/cli/php.ini
     5) /etc/php5/cli/php.ini~
     6) /home/dennis/Downloads/php.ini
     7) /usr/share/doc/php5-common/examples/php.ini-dist
     8) /usr/share/doc/php5-common/examples/php.ini-paranoid
     9) /usr/share/doc/php5-common/examples/php.ini-recommended
    10) /usr/share/php5/php.ini-dist
    11) /usr/share/php5/php.ini-dist.cli
    12) quit
    Choose a file to edit: 12
    
        2
  •  2
  •   Andrew    16 年前

    例如,如果您只想要任何旧路径,则选择第一条:

    nano `locate php.ini | head -n 1`
    

    要从中间选择结果,请同时使用head和tail,例如第11个:

    nano `locate php.ini | head -n 11 | tail -n 1
    

    blah

    nano `locate php.ini | grep blah'
    

    编辑:

    每次在这之后 ctrl-r php.ini bash会在您的历史记录中为您找到该命令,这样您就不必再次键入它。

        3
  •  1
  •   KARASZI István    16 年前

    如果只有一个结果:

    nano `locate php.ini`
    

    如果要编辑最后一个

    nano `locate php.ini|tail -n 1`
    

    如果只想在目录中搜索:

    nano `find /path/where/the/directory/is -type f -name php.ini`
    

    等。

        4
  •  1
  •   hluk    16 年前

    有几种方法:

    1. 要编辑第一个匹配的文件:

      nano `locate -l1 php.ini`
    2. 要在历史记录中搜索最近的命令,请反复按CTRL+R。

    3. 在zsh中,您可以执行(通常比定位慢):

      nano /etc/**/php.ini

    提示:对常用命令使用别名或shell函数。

        5
  •  1
  •   user1313505    14 年前

    我喜欢第一个答案中的方法,但出于我的目的,我想对当前目录树进行软匹配,因此我对其进行了如下修改:

    choose () {
    PS3="Choose a file to edit: "
    select opt in $(find . -name \*$1\*) quit
    do
        if [[ $opt = "quit" ]]
        then
            break
        fi
        nano "$opt"
        done
    }
    
        6
  •  0
  •   Behrooz Ahadian    9 年前

    locate filename | xargs xdg-open