2010-01-18 2 views
3

Это похоже на довольно типичный прецедент, но я буду проклят, если смогу это выяснить. Должно быть, что-то фундаментальное, что мне не хватает.Найти файлы: Получение загруженного буфера файлов, указанных фильтром, содержащим текст

находка-Dired в основном передний конец команды находит, что дает Dired-буфер результатов

найти-Grep-Dired, кажется, больше переднего конца к Grep больше, чем найти. и выдает затухающий буфер, но он ищет все файлы в дереве каталогов.

Что я хотел бы, это возможность запускать по заданному пути и поиск * .css для # some-id и дать ему dired-buffer для дальнейшей обработки.

Кажется, все части есть, но я не понял этого. Поэтому я думаю, что это нечто фундаментальное, которое я, возможно, пропустил.

+0

Какая дополнительная обработка? Поиск? Поиск и замена? Что-то другое? –

+0

поиск и замена, вероятно, будут распространены да, но, возможно, я хочу переместить/скопировать их в другой каталог или удалить их в основном любыми командами, которые вы можете выполнять в процессе работы. –

+1

Я собирался предлагать файлы с надписями, маркировки (% m), а затем использовать команды поиска (regex search) и Q (регулярного поиска и замены). Но вам нужно более общее решение. –

ответ

1

Похоже, что функция, которую вы ищете, это grep. Он будет вызывать утилиту grep с выражением, которое вы ему даете, и собирать выходные данные в интерактивном буфере. Вы можете выбрать любую из строк соответствия в буфере, чтобы перейти к этой строке в файле, из которого соответствует совпадение.

Например, если вы запустите M-x grep, вы должны получить следующий запрос в мини-буфере:

Run grep (like this): grep -n

Затем добавьте регулярное выражение и Глоб шаблон, который вы хотите перейти к Grep:

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

И это должно дать вам список совпадений для #some-id во всех файлах, соответствующих *.css в текущем каталог. Если вы хотите рекурсировать через подкаталоги, вам нужно использовать rgrep вместо grep. Это похоже на то, что вы ищете, или я полностью неправильно понял ваш запрос?

+0

почти, мне нужно, чтобы он сочетался с поиском для повторного прохождения, если только grep не может быть сделано для этого. –

+0

Попробуйте rgrep. Он использует find для рекурсии через подкаталоги и grep всех файлов внутри. –

+0

ah rgrep ближе, единственное, что отсутствует, выводится в бутилированный буфер, поэтому я могу делать такие вещи, как select/move/copy all the files the once. –

1

Я дам кредит А. Леви. Но я думаю, что понял это. Кажется, что find-dired действительно является инструментом для работы, но на моей машине с Windows он не заполняет args «-exec grep», и мне это не приходило в голову. Мой 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 \{\} \; 
2

Это немного поздно, но вот функция Emacs-Lisp Я использую прямо сейчас:

(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 с футляром - нечувствительное сопоставление имени файла.

1

Вы сказали (в комментариях):

единственное, что отсутствует выводит на Dired буфер так что я могу делать вещи, как выбрать/переместить/скопировать все эти файлы сразу

Извините, я не видел этот вопрос до сих пор. Эта функция доступна с Dired+.Команда diredp-grepped-files-other-window разворачивается. Помечается по файлам, указанным grep просмотров. (Он также работает для любого другого режима, полученного от compilation-mode.)