每次我需要查找文件然后打开它时,我必须使用: find ./ -name ****.properties. ,然后复制结果,然后 vi “将结果粘贴到这里”。如果我需要使用鼠标,可能会有点麻烦。那么有没有更好的方法来做到这一点?
答案1
您可以使用 AWK 或 sed 打开任意文件来打印特定的行号。
vi "$(find ./ -name **.properties | awk 'NR==2')"
或者
vi "$(find ./ -name **.properties | awk 'NR==2{print;quit}')"
或者
vi "$(find ./ -name **.properties | sed -n '2p')"
或者
vi "$(find ./ -name **.properties | sed -n '2{p;q}')"
如果文件数量很多,则带有quit
或的版本返回速度会更快一些。q
答案2
find . -name \*.properties | xargs -d '\n' vi
将在单个vi
实例中打开所有文件。要仅打开第一个文件,请使用
find . -name \*.properties | head -1 | xargs -d '\n' vi
答案3
如果你将 shell 更改为 zsh,那么你需要的find
次数就会少很多,因为 zsh 允许你find
通过通配符来完成大部分操作。首先,**/
具有特殊含义:递归**/foo
扩展到当前目录及其子目录中调用的文件foo
,即它匹配与相同的文件find . -name foo
。因此,你可以使用
vi **/*.properties
从 bash 4.0 开始,如果您输入shopt -s globstar
,~/.bashrc
其**/
行为方式相同。
在 zsh 中,由于有了 glob 限定符(在文章末尾有非常简洁的描述),你拥有更多的可能性。zshexpn
手册页)。其原理是在匹配项后用括号添加一个或多个限定符来限制匹配项。例如,限定符.
限制为常规文件,而/
限制为目录。限定符[1]
只保留第一个匹配项;[1,4]
保留前四个匹配项;等等。例如,要编辑第一个(按完整路径字典顺序)匹配的常规文件*.properties
:
vi **/*.properties(.[1])
如果您希望编辑最近修改的匹配文件,则可以使用om
限定符按修改时间对匹配项进行排序(按时间增加的顺序):
vi **/*.properties(.om[1])
答案4
我想有人已经给出了答案:
查找 -name *.properties -exec vi {} \;
这将导致对通过“find -name *.properties”找到的文件进行一系列的编辑。
如果您只想打开第二个文件:
vi "$(find -name *.properties | awk ‘NR==2’)"