代码之家  ›  专栏  ›  技术社区  ›  Tom Willis

查找文件:获取由包含文本的筛选器指定的文件的目录缓冲区

  •  3
  • Tom Willis  · 技术社区  · 15 年前

    这似乎是一个非常典型的用例,但是如果我能弄清楚的话,我会被诅咒的。一定有一些基本的东西我遗漏了。

    find dired基本上是find命令的前端,该命令生成结果的dired缓冲区

    寻找grep dired似乎更像是grep的前端,而不是寻找。并生成一个dired buffer,但它会搜索目录树中的所有文件。

    我想要的是能够从一个给定的路径开始,搜索*.css中的某个ID,并让它给我一个脏的缓冲区,以便进一步处理。

    似乎所有的碎片都在那里,但我还没弄清楚。所以我认为这是我可能错过的最基本的事情。

    4 回复  |  直到 15 年前
        1
  •  2
  •   A. Levy    15 年前

    听起来你要找的功能是 grep . 它将使用您给出的表达式调用grep实用程序,并在交互缓冲区中收集输出。您可以选择缓冲区中的任何匹配行,以跳转到匹配源文件中的该行。

    例如,如果您运行 M-x grep ,您应该在迷你缓冲区中得到以下提示:

    Run grep (like this): grep -n

    然后添加要传递给grep的regexp和glob模式:

    Run grep (like this): grep -n #some-id *.css

    它应该给你一个匹配的列表 #some-id 在所有匹配的文件中 *.css 在当前目录中。如果您想通过子目录递归,那么您需要使用rgrep而不是grep。这听起来像你在找什么,还是我完全误解了你的要求?

        2
  •  2
  •   coredump    11 年前

    这有点晚了,但下面是我现在使用的EmacsLisp函数:

    (defun find-iname-grep-dired (dir pattern regexp)
      (interactive
       "DFind-name (directory): \nsFind-name (filename wildcard): \nsFind-grep (grep regexp): ")
      (find-dired dir (concat "-iname " (shell-quote-argument pattern) " "
                              "-type f -exec " grep-program " " find-grep-options " -e "
                              (shell-quote-argument regexp) " "
                              (shell-quote-argument "{}") " "
                              (shell-quote-argument ";"))))
    

    它结合 find-grep-dired find-name-dired 与不区分大小写的文件名匹配。

        3
  •  1
  •   Tom Willis    15 年前

    我会给A.征费抵免。但我想我明白了。看起来,find dired确实是这个工作的工具,但是在我的windows机器上,它并没有用“-exec grep”预先填充args,我也没有想到要这样做。不过,我的Linux机器会用grep预先填充它。

    所以…

      #on Linux
      M-x find-dired
      Run Find in Directory: <current_path> 
      Run find(with args): -type f -exec grep -q -e \{\} \; 
    
      #on windows
      M-x find-dired
      Run Find in Directory: <current_path> 
      Run find(with args): 
    
      #Solution
      M-x find-dired
      Run Find in Directory: <current_path> 
      Run find(with args): -type f -iname "*.css" -exec grep -q -e #some-id \{\} \; 
    
        4
  •  1
  •   Drew    9 年前

    你说(在评论中):

    唯一缺少的是输出到一个脏的缓冲区 所以我可以一次选择/移动/复制所有这些文件

    抱歉,我直到现在才看到这个问题。该功能可用于 Dired+ . 命令 diredp-grepped-files-other-window 在所指示的文件上打开dired grep 击打。(它也适用于从 compilation-mode 。)