2

我想在文件中搜索一个字符串并将生成的文件列表传递给 OSX 的“打开”命令,从而打开所有包含所述字符串的文件,以便在其默认编辑器(也不是 vim)中进行编辑。

例如,运行:

find . -name "*.txt" | xargs grep -l "RANDOMSTRING"

可能会返回:

./folder1/file1.txt
./folder1/file2.txt
./folder2/file3.txt
./file4.txt

但是,简单地将这个列表传递给 open 命令会失败:

find . -name "*.txt" | xargs grep -l "RANDOMSTRING" | open

我认为这是因为“换行符”或“回车”,因为运行:

open ./folder1/file1.txt ./folder1/file2.txt ./folder2/file3.txt ./file4.txt

作品。

我只是不确定如何从返回的输出中删除换行符并将其传递给 open 命令。我需要另一个命令来管道输出,它将正确格式化文件列表,然后将列表传递给打开命令。虽然换行符甚至可能不是问题。

PS - 我不想创建一个临时文件来执行此操作。但是,我愿意创建 .zshrc 或 .bashrc 函数。

4

1 回答 1

3

find . -name "*.txt" | xargs grep -l "RANDOMSTRING" | xargs open

只有保留open不起作用,因为命令open期望输入是正确的格式,而不是来自标准输入管道。xargs是否可以从标准输入逐行读取并将其提供给open. 同样作为旁注,xargs有时文件名包含空格会出现问题。因此,使用 find-print0时,最后使用选项来处理它。使用 xargs 查找示例可在man xargs

于 2013-05-14T07:01:50.647 回答