如何`定位`多个文件并在vim中打开它们?

San*_*mar 10 command-line vim terminal io-redirection locate

假设我有一个名为的文件,filename123.txt并且它是单个文件,我可以locate使用命令locate filename123. 它只返回这个文件。

现在我想用vi/打开它vim。但我不想去那个位置并键入vi命令后跟文件名。在这里,我希望将 的结果locate filename123附加到 vi 命令。我怎么能这样做?我已经尝试过:

locate filename123 | vi
Run Code Online (Sandbox Code Playgroud)

但这不起作用。这个错误出现在终端中:

santosh@santosh:~$ locate filename123 | vi
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: Finished.
Run Code Online (Sandbox Code Playgroud)

man*_*ork 12

您可以使用xargs

locate filename123 | xargs vi
Run Code Online (Sandbox Code Playgroud)

默认情况下,xargs将尽可能少地执行指定命令的实例,根据系统的ARG_MAX传递尽可能多的参数。要限制传递给 实例的参数数量vi,请使用xargs'-n选项。

要处理包含空格的文件名,请使用xargs'-d选项:

locate filename123 | xargs -d '\n' vi
Run Code Online (Sandbox Code Playgroud)

要处理包含换行符的文件名,请使用xargs'-0选项和locate'-0选项:

locate -0 filename123 | xargs -0 vi
Run Code Online (Sandbox Code Playgroud)

(如果-0它们中的任何一个都不可用,请检查--null太或另一种将字符指定\000为分隔符的方法。)