Cal*_*leb 13
Gilles 是完全正确的,这ls
是一个非常糟糕的例子,因为在命令行上可以更轻松地完成文件名 glob 扩展ls
,而根本无需使用!如果您所谓的“文本文件”具有文件扩展名来识别它们,您可以执行以下操作:
editor-command *.txt
Run Code Online (Sandbox Code Playgroud)
为了演示一种技术,让我们使用一个更复杂的示例,该示例无法仅通过文件名匹配来完成,并根据内容打开文件,而不仅仅是文件名。假设您想打开所有包含字符串“content-type”的文件。
假设您的编辑器将接受多个文件名并在单独的缓冲区中一次打开它们或按顺序处理它们,您可以简单地运行:
editor-command $(grep -i content-type)
Run Code Online (Sandbox Code Playgroud)
现在回到您最初的问题,假设您不知道它们是否是基于名称的文本文件。然后您需要使用另一个程序来识别它们,然后根据该数据打开它们。该程序file
会告诉您某物是什么类型的文件,您可以只为文本文件grep该列表,然后只打开匹配的文件名,如下所示:
editor-command $(file -ni * | grep 'text/plain' | cut -d: -f1)
Run Code Online (Sandbox Code Playgroud)
$()
构造内命令链的输出将用作编辑器的参数。我有时分两个阶段这样做。假设我正在查看一些文件集,并为自己获取包含字符串“content-type”的每个 xml 文件的列表
find -type f -iname '*xml' | xargs grep -Hi 'content-type' | cut -d: -f1
Run Code Online (Sandbox Code Playgroud)
...并决定我要打开它们。然后我使用最后一个命令历史快捷方式并执行以下操作:
vim $(!!)
Run Code Online (Sandbox Code Playgroud)
...在我最喜欢的编辑器 vim 中打开上一个命令的所有结果。
如果您的编辑器一次只接受一个文件并且您需要继续生成编辑器,则您需要在jmtd 的答案中使用 thexargs
或for
loop的变体,具体取决于您是否使用需要 stdio 的基于终端的编辑器。
归档时间: |
|
查看次数: |
17104 次 |
最近记录: |