Как найти файл в каталогах рекурсивно

Часто я знаю имя файла, но не помню или не считаю его громоздким, чтобы указать именно каталог. Я хотел бы иметь возможность найти файл файл x/y/*/some_file.txt, где * разрешил бы поиск в рекурсивных каталогах вместо текущего.

Ответ 1

Как описано здесь:

M-x find-name-dired

После того, как вы предоставите каталог и шаблон, соответствующие файлы будут отображаться в буфере Dired. Вы можете перемещаться по списку файлов (C-n, C-p и т.д.) И открывать файлы по своему желанию (Ret).

Ответ 2

ido-find-file делает это: когда введенное имя файла не совпадает ничего в текущем каталоге, он использует что-то вроде locate для соответствия что вы написали против всех файлов в вашей системе.

Настройка - это только одна строка:

(ido-mode)

После этого C-x C-f вызовет ido-find-file. Кроме того, я обычно добавляю:

(setq ido-enable-flex-matching t)

потому что мне это нравится, но с ним вы получите locate больше результатов, то есть foo также будет соответствовать froo.

Ответ 3

Я давно искал эту функцию, и теперь я доволен тем, что нашел: я использую helm-projectile.

Projectile - библиотека взаимодействия проекта. Проекты - это каталоги VCS или каталоги, содержащие файл .projectile. Он основан на поиске GNU (но также предлагает реализацию emacs lisp)

https://github.com/bbatsov/projectile

(вы можете установить его с помощью packages.el). Вы можете использовать его в одиночку: вызов projectile-find-file (или projectile-mode и C-c p f). Он использует ido для завершения по умолчанию, но в этом случае я предпочитаю интерфейс helm-projectile.

Мои коллеги все время говорили мне использовать Sublime Text из-за этой функции. К счастью, я нашел снаряд:)

Ответ 5

Вот решение, которое дает вам избирательность по искаженным файлам и подкаталогам. Для его использования вам нужны Dired + и < сильные > Сосульки.

Команда, используемая только в Dired, является icicle-visit-marked-file-of-content-recursive (или версией -other-window). Он привязан к M-+ C-F (для другого окна используйте M-+ C-O - и да, это прописные буквы F и O).

Что он делает:

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

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

  • " Соответствие" ваш вход может означать один или оба:

    • Соответствие файла name
    • Соответствие файла

    Таким образом, ваш вход может быть двухчастным (разделяется ударом C-M-j: частью имени файла и частью содержимого файла. Узкий выбор путем сопоставления имен файлов и более узкий, путем сопоставления текста в этих файлах Этот поиск выполняется быстро - он преуспевает, как только он находит одно совпадение в файле.

    Вы можете пропустить любую часть: сопоставить только имена файлов (быстро) или только содержимое файла (медленнее, естественно).

  • Вы можете комбинировать шаблоны ввода - прогрессивное завершение. Намного проще добавлять дополнительные шаблоны для совпадения, инкрементально и интерактивно, чем пытаться создать одно регулярное выражение, которое сделает именно то, что вы хотите.

  • Каждый шаблон ввода (каждая часть шаблона из двух частей) может быть регулярным выражением. Также доступно нечеткое сопоставление.

  • Вы также можете просто вставлять поддиректории в свой Dired buffer, вместо того, чтобы иметь их как отдельные Dired-буферы. Любые файлы и поддиры, помеченные в буфере Dired, обрабатываются одинаково.

    Если вы не хотите спускаться в поддиры, которые отмечены, вы можете использовать нерекурсивную версию команды icicle-visit-marked-file-of-content, привязанную к C-F (C-O для другого окна).

Если вы также используете Закладка +, вы можете пометить буфера Dired или набор буферов Dired. Закладка фиксирует, какие файлы и подкаталоги отмечены, какие подкаталоги вставлены и какие файлы и подкаталоги опущены. Переход к такой закладке восстанавливает все эти вещи. Это дает вам возможность сделать снимок проекта, который вы можете выполнить с помощью M-+ C-F и т.д.

Ответ 6

Множество опций, перечисленных ниже, я использую следующую команду:

find-file-in-current-directory

Вы можете поместить его в свои .emacs следующим образом:

;; Find file in current directory:
(global-set-key (kbd "C-M-,") 'find-file-in-current-directory)

Интерфейс очень хорошо знаком тем, кто использует инструменты fsf (https://github.com/junegunn/fzf)

Ответ 7

Icicles команда icicle-locate (или icicle-locate-file, если у вас нет программы locate для вашей ОС) для этого. Найдите файл в любом месте в данном каталоге (включая ~HOME или корневой каталог).

Вы можете сопоставлять любые части абсолютного имени файла (т.е. путь и имя файла). Вы можете использовать несколько видов соответствия, включая регулярное выражение, подстроку и нечеткое соответствие.

Ответ 8

edit. Я нашел гораздо лучше с projectile, см. мой другой ответ.

Существует find-recursive.el: http://www.webweavertech.com/ovidiu/emacs/find-recursive.txt

Загрузите его, поместите в свой путь загрузки и потребуйте его в своем .emacs: (он недоступен через ELPA или el-get)

(require 'find-recursive)      

теперь, когда вы вызываете M-x find-recursive, он будет запрашивать имя файла для поиска рекурсивно, базового каталога, тогда вам нужно выбрать один файл из списка результатов. К сожалению, он не интегрирован в ido, но мне он нравится, иногда это полезно.