Encontrar archivos por nombres

11

¿Cómo puedo llevar todos los archivos con nombres que conforman una expresión regular específica, recursivamente en un árbol de directorios, a un único búfer dired?

¿Entonces puedo renombrarlos / eliminarlos todos a la vez?

iLemming
fuente
2
¿Ya has considerado 'find-name-dired'? (Utiliza comodines, no expresiones regulares.)
Marco Wahl el
2
Debe enviar eso como respuesta @MarcoWahl. ¡No tenía idea de que Dired pudiera hacer eso!
Tyler
1
La biblioteca find-dired+.elle ofrece una versión mejorada del comando find-name-dired. Acepta argumentos opcionales que especifican (1) profundidades de búsqueda mínimas y máximas y (2) rutas para excluir de la búsqueda.
Dibujó el

Respuestas:

11

Comodín

Utilizar

M-x find-name-dired

para obtener archivos de acuerdo con un comodín.

Ejemplo

Busque todos los archivos con el sufijo "org" en el directorio "~ / org /". Introduzca la siguiente

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

y disfrutar.

Expresión regular

Utilizar

M-x find-dired

con argumentos adecuados para obtener archivos de acuerdo con una expresión regular.

Ejemplo

Busque todos los archivos con el sufijo "org" en el directorio "~ / org /". Introduzca la siguiente

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

y disfrutar.

Marco Wahl
fuente
¿Es posible automatizar este proceso donde verificar automáticamente *orgsin ingresarlo manualmente
Hasta el
Si te entiendo correctamente, hay muchas posibilidades. Por ejemplo, haga un comando especial de búsqueda con (defun my-find-orgfiles () (interactivo) (find-name-dired "~ / myorgs /" "* org")) y póngalo en su archivo de inicio. Luego use Mx my-find-orgfiles RET. O incluso asociar el comando a una tecla.
Marco Wahl
¿Puede my-find-orgfiles ()seguirse por "t" y "Q" // que selecciona todo y aplica? @Marco Wahl
Alper
2

Expresión regular

Para usar una expresión regular, también puede intentarlo find-lisp-find-dired. Este comando pertenece a la lib estándar. find-lisp , que está completamente escrito en elisp, es decir, no necesita tener instalado un findprograma externo .

Por ejemplo, a continuación se muestran todos los archivos con la extensión '.el' en el directorio ~ / lisp:

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

(El partido honra case-fold-search).

Comodín

Vale la pena señalar que desde la próxima versión de Emacs (v26.1), Dired admite wilcards en la parte del directorio del argumento del nombre del archivo. Eso significa los siguientes trabajos:

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

(La coincidencia distingue entre mayúsculas y minúsculas).

Este comando muestra en un búfer Dired todos los archivos con la extensión '.c', 2 niveles de profundidad en '~ / soft' . Eso significa que todos los archivos como '~ / soft / foo / bar.c' aparecerán en la lista, pero no los archivos como '~ / soft / qux.c' ni '~ / soft / foo / baz / qux.c' .

Lo mismo pero sin distinción entre mayúsculas y minúsculas:

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

Prima

Si está ejecutando Dired con un 'ls' implementado en elisp, 'ls-lisp' o 'eshell-ls', puede enumerar recursivamente todos los archivos que coinciden con un comodín con la siguiente sintaxis:

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

Nota la '**'. En este caso, se muestran todos los archivos bajo '~ / soft' que coinciden con el comodín, incluso '~ / soft / qux.c' .

Sin embargo, cuando está utilizando insert-directory-program la comodín, la expansión se realiza mediante el shell del sistema; eso significa que esta sintaxis recursiva '**' solo funciona si es compatible con su shell. Por ejemplo, zsh lo admite, pero bash no. Con shells que no sean zsh, el comando anterior hará lo mismo que:

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