0

对我来说,在 greg 中使用 -l 标志来获取文件列表是很常见的。我喜欢有一种方法可以立即在 sublime 中打开所有找到的文件(我假设使用 subl 命令),而不仅仅是输出一个列表。

我目前的工作流程:

grep --include=*.php -R -l "tribe_events_event_classes" .

哪个输出:

./plugins/events-calendar-pro/views/day/loop.php
./plugins/events-calendar-pro/views/map/loop.php
./plugins/events-calendar-pro/views/photo/loop.php
./plugins/events-calendar-pro/views/widgets/mini-calendar/list.php
./plugins/the-events-calendar/lib/tribe-template-factory.class.php
./plugins/the-events-calendar/public/template-tags/general.php
./plugins/the-events-calendar/views/list/loop.php
./plugins/the-events-calendar/views/month/single-event.php
./themes/roots/tribe-events/day/loop.php

然后我通常使用以下方法一一复制并粘贴文件:

subl ./plugins/events-calendar-pro/views/day/loop.php
subl ./plugins/events-calendar-pro/views/map/loop.php
etc...

我知道这里必须是一种更有效的方法来做到这一点。

4

2 回答 2

4

最简单的方法是:

subl `grep --include=*.php -R -l "tribe_events_event_classes" .`

(注意反引号)。

或者:

for file in `grep --include=*.php -R -l "tribe_events_event_classes" .`; do
    subl $file
done

编辑

由于反引号不能很好地嵌套,因此使用命令替换更好:

subl $(grep --include=*.php -R -l "tribe_events_event_classes" .)
于 2013-07-30T16:36:33.063 回答
0

一个 bash 脚本可以很好地解决这个问题。这是一个未经测试的概念(可能需要一些调整):

#!/bin/bash

files=()

while grep --include=*.php -R -l "tribe_events_event_classes" .; do
  files += ("$REPLY")
done

for file in "${files[@]}"; do 
  subl $file 
done
于 2013-07-30T16:35:11.277 回答