¿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?
¿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
¿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:
find-dired+.el
le ofrece una versión mejorada del comandofind-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.Respuestas:
Comodín
Utilizar
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
y disfrutar.
Expresión regular
Utilizar
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
y disfrutar.
fuente
*org
sin ingresarlo manualmentemy-find-orgfiles ()
seguirse por "t" y "Q" // que selecciona todo y aplica? @Marco WahlExpresió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 unfind
programa externo .Por ejemplo, a continuación se muestran todos los archivos con la extensión '.el' en el directorio ~ / lisp:
(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:
(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:
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:
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:fuente