Пошук файлів за іменами


11

Як я можу зв'язати всі файли з іменами, які відповідають певному регулярному вираженню, рекурсивно в дереві каталогів, до одного введеного буфера?

Тож я можу перейменувати / видалити їх усі відразу?


2
Ви вже вважали "find-name-dired"? (Використовує підстановку, а не зворотні позначки.)
Marco Wahl

2
Ви можете подати це як відповідь @MarcoWahl. Я не мав уявлення, що потопаючий може це зробити!
Тайлер

1
Бібліотека find-dired+.elнадає розширену версію команд find-name-dired. Він приймає необов'язкові аргументи, які задають (1) min та max глибини пошуку та (2) шляхи, які потрібно виключити з пошуку.
Дрю

Відповіді:


11

Уайлдкард

Використовуйте

M-x find-name-dired

щоб отримати файли згідно з підстановкою.

Приклад

Знайдіть усі файли з суфіксом "org" у каталозі "~ / org /". Введіть наступні

M-x find-name-dired
~/org
*org

і насолоджуватися

Регулярна виразність

Використовуйте

M-x find-dired

з відповідними аргументами для отримання файлів згідно з регулярним виразом.

Приклад

Знайдіть усі файли з суфіксом "org" у каталозі "~ / org /". Введіть наступні

M-x find-dired
~/org
-regex ".*org$"

і насолоджуватися


Чи можливо автоматизувати цей процес там, де автоматично перевіряють, *orgне вводячи його вручну
Альпер

Якщо я правильно вас зрозумів, можливостей є багато. Наприклад, зробіть спеціальну команду seach з (defun my-find-orgfiles () (інтерактивна) (find-name-dired "~ / myorgs /" "* org")) і покладіть її у свій файл init. Потім використовуйте Mx my-find-orgfiles RET. Або навіть прив’язати команду до клавіші.
Marco Wahl

Чи можуть my-find-orgfiles ()супроводжуватися "t" та "Q" //, які вибирають усі та застосовують? @Marco Wahl
alper

2

Регулярна виразність

Щоб скористатися регулярним виразом, ви також можете спробувати find-lisp-find-dired. Ця команда належить до стандартної lib. find-lisp , який повністю написаний на elisp, тобто вам не потрібно встановлювати зовнішню findпрограму.

Наприклад, нижче показано всі файли з розширенням '.el' під каталогом ~ / lisp:

M-x find-lisp-find-dired RET ~/lisp RET \.el\' RET

(Матч відзначається case-fold-search).

Уайлдкард

Варто зазначити, що з наступного випуску Emacs (v26.1) Dired підтримує wilcards в частині каталогу аргументу імені файлу. Це означає такі роботи:

C-x d ~/soft/*/*.c RET

(Збіг залежить від регістру).

Ця команда відображає в буфері «Дабрі» всі файли з розширенням '.c', 2 рівні глибини під '~ / soft' . Це означає, що всі файли типу '~ / soft / foo / bar.c' будуть перераховані, але не такі файли, як '~ / soft / qux.c' ні '~ / soft / foo / baz / qux.c' .

Те саме, але нечутливе до регістру:

C-x d ~/soft/*/*.[cC] RET

Бонус

Якщо у вас працює Dired із 'ls', реалізованим у elisp, 'ls-lisp' або 'eshell-ls', ви можете рекурсивно перелічити всі файли, що відповідають підстановці із наступним синтаксисом:

C-x d ~/soft/**/*.c RET

Зверніть увагу на "**". У цьому випадку відображаються всі файли в розділі "~ / soft", що відповідає підстановці, навіть "~ / soft / qux.c" .

Однак, коли ви використовуєте insert-directory-program підстановку, розширення відбувається за допомогою оболонки системи; це означає, що цей рекурсивний синтаксис '**' просто працює, якщо він підтримується вашою оболонкою. Наприклад, zsh підтримує його, але bash - ні. З іншими оболонками, які zsh, попередня команда зробить те саме, що:

C-x d ~/soft/*/*.c RET
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.