我多次面对这个简单而重复的任务配置LAMP或Ubuntu或Drupal中的一些东西:
我必须经常编辑一个配置文件(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
命令有类似的方法吗?
答案 0 :(得分:10)
如果文件或目录的名称中包含空格,则无效。但是制作版本不会太难。
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
答案 1 :(得分:1)
基本问题是您需要指定一种方法来选择找到找到的路径之一。您现在手动执行此操作,但要自动执行此操作,您需要指定如何进行该选择。
例如,如果您只想要任何旧路径,那么请选择第一个路径:
nano `locate php.ini | head -n 1`
从中间选择结果使用头部和尾部,例如第11个:
nano `locate php.ini | head -n 11 | tail -n 1
一般情况下,将参数更改为head是您要编辑的行数。您可能想要尝试的其他方式是,如果您知道路径的唯一部分,请说blah
是您想要的路径的一部分,但不是在其他任何路径中,即/ opt / bin / blah / php的.ini。然后你可以改用grep:
nano `locate php.ini | grep blah'
编辑:
虽然这些提示都按照你的意愿行事,但我只是重新阅读你的问题,并意识到有更好的方法。做你现在做的事 - 手动运行locate,然后输入nano /some/path/php.ini。
每次此后只需输入ctrl-r
,然后php.ini
和bash会在您的历史记录中找到该命令,以便您不必再次输入。
答案 2 :(得分:1)
如果您只有一个结果:
nano `locate php.ini`
如果你想编辑最后一个
nano `locate php.ini|tail -n 1`
如果您只想在目录中搜索:
nano `find /path/where/the/directory/is -type f -name php.ini`
等
答案 3 :(得分:1)
有几种方法:
编辑第一个匹配的文件:
nano `locate -l1 php.ini`
要在历史记录中搜索最近的命令,请反复按CTRL + R.
在zsh中你可以做(通常比定位慢):
nano /etc/**/php.ini
提示:对常用命令使用别名或shell函数。
答案 4 :(得分:1)
我喜欢第一个答案中的方法,但出于我的目的,我想在当前目录树中进行软匹配,所以我将其修改如下:
choose () {
PS3="Choose a file to edit: "
select opt in $(find . -name \*$1\*) quit
do
if [[ $opt = "quit" ]]
then
break
fi
nano "$opt"
done
}
答案 5 :(得分:0)
只需使用此命令:
locate filename | xargs xdg-open