31 Dired, el Editor de Directorios

Dired crea un búfer Emacs que contiene un listado de un directorio, y opcionalmente también de algunos de sus subdirectorios. Puede usar los comandos normales de Emacs para moverse por este búfer, y comandos especiales de Dired para operar sobre los archivos listados. Dired funciona tanto con directorios locales como remotos.

El búfer de Dired es normalmente de sólo lectura, y no está permitido insertar texto en él (sin embargo, el modo Wdired lo permite, ver 31.18 Editar el Búfer Dired). Los caracteres de impresión ordinarios como d y x se redefinen para comandos Dired especiales. Algunos comandos de Dired marcan o señalan el archivo actual (es decir, el archivo de la línea actual); otros comandos operan sobre los archivos marcados o sobre los archivos señalados. Primero se marcan ciertos archivos para poder operar sobre todos ellos con un solo comando.

El paquete Dired-X proporciona varias funciones extra para el modo Dired. Consulte Dired-X en el Manual del Usuario de Dired Extra.

También puede ver una lista de archivos en un directorio con C-x C-d (list-directory). A diferencia de Dired, este comando no permite operar sobre los archivos listados. Véase 19.8 Directorios de Archivos.

31.1 Entrar en Dired

Para invocar Dired, teclee Ctrl-x d (C-x d , dired). Esto lee el nombre de un directorio usando el minibúfer, y abre un búfer Dired listando los archivos en ese directorio. También puede proporcionar un patrón de nombre de archivo comodín como argumento del minibúfer, en cuyo caso el búfer de Dired listará todos los archivos que coincidan con ese patrón. El comodín también puede aparecer en la parte del directorio. Por ejemplo,

C-x d  ~/foo/*.el  RET
C-x d  ~/foo/*/*.el  RET

La primera lista todos los archivos con extensión .el del directorio foo. La segunda lista los archivos con extensión .el en todos los subdirectorios de foo.

En sistemas Posix, cuando el shell del sistema soporta globstar, una función de globbing recursivo, si dicho soporte está activado, puede usar globbing recursivo en Dired:

Nota

Globbing es una característica que soportan casi todos los shells, que consiste en hacer coincidir el patrón comodín y devolver los nombres de archivo y directorio que coincidan y, a continuación, sustituir el patrón comodín en el comando por los elementos coincidentes.

C-x d  ~/foo/**/*.el  RET

Este comando produce un listado de directorios con todos los archivos con extensión .el, descendiendo recursivamente en todos los subdirectorios de foo. Tenga en cuenta que existen pequeñas diferencias en la implementación de globstar entre diferentes shells. Consulte el manual de su shell para conocer el comportamiento que esta tiene.

Si el intérprete de órdenes soporta globstar, pero ese soporte está deshabilitado por defecto, aún puede permitir que Dired use esta característica personalizando dired-maybe-use-globstar a un valor no nulo; entonces Dired habilitará globstar para aquellos intérpretes de órdenes para los que sepa cómo hacerlo (vea dired-enable-globstar-in-shell para la lista de esos intérpretes de órdenes).

En el minibúfer se pueden usar los comandos habituales de historial y finalización; en particular, M-n pone el nombre del archivo visitado (si lo hay) en el minibúfer (véase 9.5 Historial del Minibúfer).

También puede invocar Dired dando a C-x C-f (find-file) el nombre de un directorio.

Puede pedir a Emacs que invoque Dired en el directorio por defecto (ver 19.1 Nombres de Archivos) de cualquier búfer, tecleando Ctrl-x Ctrl-j (C-x C-j, dired-jump). Si el búfer visita un archivo, este comando moverá el punto a la línea de ese archivo en el búfer Dired que muestra; en caso contrario, el punto acabará en el primer archivo del listado de directorios. Como excepción, si teclea Ctrl-x Ctrl-j (C-x C-j) en un búfer Dired, Emacs muestra el listado de directorios del directorio padre y coloca el punto en la línea que corresponde al directorio donde invocó dired-jump. Teclear Ctrl-x 4 Ctrl-j (C-x 4 C-j, dired-jump-other-window) tiene el mismo efecto, pero muestra el búfer Dired en una nueva ventana.

La variable dired-listing-switches especifica las opciones a dar a ls para listar el directorio; esta cadena debe contener -l. Si usa un argumento prefijo con el comando dired, puede especificar los switches de ls con el minibúfer antes de introducir la especificación del directorio. Independientemente de cómo se especifiquen, los modificadores ls pueden incluir opciones cortas (es decir, de un solo carácter) que no requieren argumentos, y opciones largas (que empiezan por --) cuyos argumentos se especifican con =.

Dired no maneja bien los archivos cuyos nombres contienen caracteres de nueva línea. Si tiene muchos archivos de este tipo, puede considerar añadir -b a dired-listing-switches. Esto entrecomillará todos los caracteres especiales y permitirá a Dired manejarlos mejor. (También puede usar el comando C-u C-x d para añadir -b temporalmente).

Dired muestra en la línea de modo una indicación de cuáles fueron los conmutadores usados para invocar ls. Por defecto, intentará determinar si los switches (modificadores) indican ordenamiento por nombre o por fecha, y lo dirá en la línea de modo. Si la variable dired-switches-in-mode-line es as-is, los switches se mostrarán textualmente. Si el valor de esta variable es un número entero, la visualización de los interruptores se truncará a esa longitud. Esta variable también puede ser una función, que será llamada con dired-actual-switches como único parámetro, y debería devolver una cadena para mostrar en la línea de modo.

Si su programa ls soporta la opción --dired, Dired le pasa automáticamente esa opción; esto hace que ls emita secuencias de escape especiales para ciertos nombres de archivo inusuales, sin las cuales no será capaz de analizar esos nombres. La primera vez que se ejecuta Dired en una sesión Emacs, comprueba si ls soporta la opción --dired llamándolo una vez con esa opción. Si el código de salida es 0, Dired usará posteriormente la opción --dired; en caso contrario no lo hará. Puede inhibir esta comprobación personalizando la variable dired-use-ls-dired. El valor no especificado (por defecto) significa realizar la comprobación; cualquier otro valor no nulo significa usar la opción --dired; y nil significa no usar la opción --dired.

En sistemas MS-Windows y MS-DOS, y también en algunos sistemas remotos, Emacs emula ls. Ver Emulación de ls en MS-Windows, para opciones y peculiaridades de esta funcionalidad.

Para mostrar el búfer de Dired en otra ventana, use C-x 4 d (dired-other-window). C-x 5 d (dired-other-frame) muestra el búfer Dired en un marco separado.

Tecleando q (q, quit-window) se esconde el búfer Dired, y se borra su ventana si esta se creó sólo para ese búfer.

31.3 Borrar Archivos con Dired

Uno de los usos más frecuentes de Dired es marcar primero los archivos para borrarlos y luego llevar a cabo esta operación.

d (d)

Marca este archivo para su eliminación (dired-flag-file-deletion).

u (u)

Elimina la marca de borrado (dired-unmark).

DEL (DEL)

Mueve el punto a la línea anterior y elimina la marca de borrado de esa línea (dired-unmark-backward).

x

Borrar archivos marcados para su eliminación (dired-do-flagged-delete).

Puede marcar un archivo para su borrado desplazándose a la línea que describe el archivo y escribiendo d (dired-flag-file-deletion). La bandera de borrado aparece como una D al principio de la línea. Este comando desplaza el punto a la línea siguiente, de modo que los comandos d repetidos marcan archivos sucesivos. Un prefijo numérico sirve como contador de repeticiones; un contador negativo significa marcar los archivos precedentes.

Si la región está activa, el comando d marca todos los archivos de la región para su borrado; en este caso, el comando no mueve el punto e ignora cualquier argumento de prefijo.

La razón de marcar los archivos para su borrado, en lugar de borrarlos inmediatamente, es reducir el peligro de borrar un archivo accidentalmente. Hasta que ordene a Dired que borre los archivos marcados, puede eliminar las marcas de borrado usando los comandos u y DEL. u (dired-unmark) funciona igual que d, pero elimina las marcas en lugar de hacerlas. DEL (dired-unmark-backward) se mueve hacia arriba, eliminando las marcas; es como u con el argumento -1. Un prefijo numérico como argumento de cualquiera de los comandos sirve como cuenta de repetición, con una cuenta negativa que significa desmarcar en la dirección opuesta. Si la región está activa, estos comandos desmarcan todos los archivos de la región, sin mover el punto.

Para borrar los archivos marcados, escriba x (x, dired-do-flagged-delete). Este comando muestra una lista de todos los nombres de archivo marcados para ser borrados, y pide confirmación con un yes (sí). Si confirma, Dired borra los archivos marcados y, a continuación, borra sus líneas del texto del búfer de Dired. El búfer Dired, con algo menos de líneas, permanece seleccionado.

Si responde que no o sale con C-g cuando se le pida que confirme, volverá inmediatamente a Dired, con las banderas de borrado aún presentes en el búfer, y sin ningún archivo borrado.

Puede borrar directorios vacíos igual que otros archivos, pero normalmente Dired no puede borrar directorios que no estén vacíos. Sin embargo, si la variable dired-recursive-deletes no es nula, entonces Dired puede borrar directorios no vacíos incluyendo todo su contenido. Esto puede ser algo arriesgado. Si el valor de la variable es always, Dired borrará directorios no vacíos recursivamente, lo que es aún más arriesgado.

Incluso si ha establecido dired-recursive-deletes a nil, puede que a veces quiera borrar directorios recursivamente sin que se le pida confirmación para todos ellos. Por ejemplo, puede que quiera esto cuando haya marcado muchos directorios para borrar y esté muy seguro de que todos ellos pueden ser borrados con seguridad. Por cada directorio no vacío se le pedirá confirmación para borrarlo, si contesta all (todos), entonces todos los directorios restantes se borrarán sin más preguntas.

Si cambia la variable delete-by-moving-to-trash a t, los comandos de borrado anteriores moverán los archivos o directorios afectados a la Papelera del sistema operativo, en lugar de borrarlos directamente. Consulte 19.12 Operaciones Varias con Archivos.

Una forma alternativa de borrar archivos es marcarlos con m y borrarlos con D, véase 31.7 Operar con Archivos.

31.4 Marcar Varios Archivos a la Vez

Los comandos #, ~, ., % & y % d marcan varios archivos para su eliminación, basándose en sus nombres de archivo:

# (#)

Marca todos los archivos de autoguardado (archivos cuyos nombres empiezan y acaban por #) para que se eliminen (véase 19.6 Guardado Automático: Protección Frente a Desastres).

~ (~)

Marca todos los archivos de copia de seguridad (archivos cuyos nombres terminan en ~) para su eliminación (véase 19.3.2 Archivos de Copia de Seguridad).

. (., punto)

Marca el exceso de archivos de copia de seguridad numéricos para su eliminación. Los archivos de copia de seguridad más antiguos y los más recientes de cualquier archivo están exentos; se marcan los del medio.

%& (% &)

Marca para borrado todos los archivos con ciertos tipos de nombres que sugieren que se pueden crear de nuevo fácilmente esos archivos.

%d expreg (% d expreg RET)

Marca para borrado todos los archivos cuyos nombres coincidan con la expresión regular expreg.

# (dired-flag-auto-save-files) marca todos los archivos cuyos nombres parecen archivos de guardado automático, es decir, archivos cuyos nombres empiezan y terminan con #. Véase 19.6 Guardado Automático: Protección Frente a Desastres.

~ (dired-flag-backup-files) marca todos los archivos cuyos nombres indican que son archivos de copia de seguridad, es decir, archivos cuyos nombres terminan en ~. Consulte 19.3.2 Archivos de Copia de Seguridad.

. (punto, dired-clean-directory) marca sólo algunos de los archivos de copia de seguridad para su eliminación: todos menos las copias de seguridad más antiguas y las más recientes de cualquier archivo. Normalmente, el número de versiones más recientes que se conservan de cada archivo viene dado por la variable dired-kept-versions (no kept-new-versions; eso sólo se aplica al guardar). El número de versiones más antiguas a conservar viene dado por la variable kept-old-versions.

El punto (.) con un argumento numérico positivo, como en C-u 3 ., especifica el número de versiones más recientes a conservar, anulando las versiones conservadas por dired. Un argumento numérico negativo anula versiones-antiguas-mantenidas (kept-old-versions), usando el valor negativo del argumento para especificar el número de versiones más antiguas de cada archivo a mantener.

% & (dired-flag-garbage-files) marca los archivos cuyos nombres coinciden con la expresión regular especificada por la variable dired-garbage-files-regexp. Por defecto, esto coincide con ciertos archivos producidos por TeX, archivos .bak, y los archivos .orig y .rej producidos por patch.

% d marca todos los archivos cuyos nombres coinciden con una expresión regular especificada (dired-flag-files-regexp). Sólo se usa la parte del nombre del archivo que no pertenece al directorio. Puede usar ^ y $ para anclar las coincidencias. Puede excluir ciertos subdirectorios del marcado ocultándolos mientras usa % d. Consulte 31.15 Ocultar Subdirectorios.

31.5 Visitar Archivos en Dired

Existen varios comandos de Dired para visitar o examinar los archivos listados en el búfer de Dired. Todos ellos se aplican al archivo de la línea actual; si ese archivo es en realidad un directorio, estos comandos invocan Dired en ese subdirectorio (creando un búfer Dired separado).

f (f)

Visita el archivo descrito en la línea actual, como teclear Ctrl-x Ctrl-f (C-x C-f) y suministra ese nombre de archivo (dired-find-file). Véase 19.2 Visitar Archivos.

RETURN (RET)
e (e)

Equivalente a f.

o (o)

Como f, pero usa otra ventana para mostrar el búfer del archivo (dired-find-file-other-window). El búfer de Dired permanece visible en la primera ventana. Es como usar C-x 4 C-f para visitar el archivo. Véase 21 Varias Ventanas.

Ctrl-o (C-o)

Visita el archivo descrito en la línea actual y muestra el búfer en otra ventana, pero no selecciona esa ventana (dired-display-file).

ratón-1
ratón-2

Visita el archivo cuyo nombre ha pulsado (dired-mouse-find-file-other-window). Esto usa otra ventana para mostrar el archivo, como el comando o.

v (v)

Visualiza el archivo descrito en la línea actual, con el modo Vista (View mode) (dired-view-file). El modo Vista proporciona comandos prácticos para navegar por el búfer, pero prohíbe modificarlo; véase 15.6 Modo Vista.

^ (^)

Visita el directorio padre del directorio actual (direct-up-directory). Esto equivale a desplazarse a la línea para .. y ahí escribir f (f).

Opción de Usuario: dired-kill-when-opening-new-dired-buffer

Cuando se visita un nuevo subdirectorio en Dired, Emacs abrirá (por defecto) un nuevo búfer para mostrar este nuevo directorio, y dejará el antiguo búfer de Dired como está. Si esta opción de Usuario no es nula, el antiguo búfer de Dired será eliminado después de seleccionar el nuevo directorio. Esto significa que si está recorriendo una estructura de directorios en Dired, no terminará con más de un único búfer Dired.

31.6 Marcas vs. Banderas

En lugar de marcar un archivo con D, puede marcar el archivo con algún otro carácter (normalmente *). La mayoría de los comandos Dired para operar sobre archivos usan los archivos marcados con *. El único comando que opera sobre archivos marcados es x, que los borra.

Estos son algunos comandos para marcar con *, para desmarcar y para operar sobre marcas. (Ver 31.3 Borrar Archivos con Dired, para comandos para marcar y desmarcar archivos).

m (m)
*m (* m)

Marca el archivo actual con * (dired-mark). Si la región está activa, marca en su lugar todos los archivos de la región; de lo contrario, si se proporciona un argumento numérico n, marca en su lugar los n archivos siguientes, empezando por el archivo actual (si n es negativo, marca los -n archivos anteriores). Si se invoca en la línea de cabecera de un subdirectorio (véase 31.12. Subdirectorios en Dired Subdirectorios en Dired), este comando marca todos los archivos de ese subdirectorio.

*N (* N)

Informa del número y tamaño de los archivos marcados (dired-number-of-marked-files).

** (\* *)

Marca todos los archivos ejecutables con * (dired-mark-executables). Con un argumento numérico, desmarca todos esos archivos.

*@ (* @)

Marca todos los enlaces simbólicos con * (dired-mark-symlinks). Con un argumento numérico, desmarca todos esos archivos.

*/ (* /)

Marca con * todos los archivos que sean directorios, excepto . y .. (dired-mark-directories). Con un argumento numérico, desmarca todos esos archivos.

*s (* s)

Marca todos los archivos del subdirectorio actual, aparte de . y .. (dired-mark-subdir-files).

u (u)
*u (* u)

Elimina cualquier marca en esta línea (dired-unmark). Si la región está activa, se desmarcan todos los archivos de la región; de lo contrario, si se proporciona un argumento numérico n, se desmarcan los n archivos siguientes, empezando por el archivo actual (si n es negativo, se desmarcan los -n archivos anteriores).

DEL (DEL)
*DEL (* DEL)

Mueve el punto a la línea anterior y elimina cualquier marca en esa línea (dired-unmark-backward). Si la región está activa, desmarca todos los archivos de la región; de lo contrario, si se proporciona un argumento numérico n, desmarca los n archivos anteriores, empezando por el archivo actual (si n es negativo, desmarca los -n archivos siguientes).

U (U)

Elimina todas las marcas de todos los archivos de este búfer Dired (dired-unmark-all-marks).

*? caracter-de-marca (* ? caracter-de-marca)

Elimina todas las marcas que usan carácter caracter-de-marca (dired-unmark-all-files). Si se invoca con M-DEL, el comando solicita caracter-de-marca. Ese caracter-de-marca es un solo carácter, no use RET para terminarlo. Véase más adelante la descripción del comando * c, que permite sustituir un carácter de marca por otro.

Con un argumento numérico, este comando consulta sobre cada archivo marcado, preguntando si desea eliminar su marca. Puede responder y para indicar que sí, n para indicar que no, o ! para eliminar las marcas de los archivos restantes sin preguntar por ellos.

*Ctrl-n (* C-n)
Alt-} (M-})

Se mueve al siguiente archivo marcado (dired-next-marked-file). Un archivo está «seleccionado» si tiene algún tipo de marca.

*Ctrl-p (* C-p)
Alt-{ (M-{)

Pasa al archivo marcado anterior (dired-prev-marked-file).

t (t)
*t (* t)

Alterna todas las marcas (dired-toggle-marks): los archivos marcados con * se desmarcan, y los archivos no marcados se marcan con *. Los archivos marcados de cualquier otra forma no se ven afectados.

c caracter-de-marca-anterior nuevo-caracter-de-marca
(c caracter-de-marca-anterior nuevo-caracter-de-marca)

Sustituye todas las marcas que usan el caracter-de-marca-anterior por marcas que usan carácter nuevo-caracter-de-marca (dired-change-marks). Este comando es la forma principal de crear o usar marcas distintas de * o D. Los argumentos son caracteres simples, no use RET para terminarlos.

Puede usar casi cualquier carácter como carácter de marca mediante este comando, para distinguir varias clases de archivos. Si caracter-de-marca-anterior es un espacio, el comando actúa sobre todos los archivos no marcados; si nuevo-caracter-de-marca es un espacio, el comando desmarca los archivos sobre los que actúa.

Para ilustrar la potencia de este comando, a continuación se muestra cómo poner marcas D en todos los archivos que no tienen marcas, a la vez que se desmarcan todos los que ya tienen marcas D:

* c D t  * c SPC D  * c t SPC

Esto supone que no hay archivos marcados con t.

%m (% m expreg RET)
*% (* % expreg RET)

Marca (con *) todos los archivos cuyos nombres coincidan con la expresión regular expreg (++dired-mark-files-regexp++). Este comando es como % d, salvo que marca los archivos con * en lugar de marcarlos con D.

Sólo se usa la parte del nombre del archivo que no pertenece al directorio. Use ^ y $ para anclar las coincidencias. Puede excluir subdirectorios ocultándolos temporalmente (consulte 31.15 Ocultar Subdirectorios).

%g expreg RET (% g expreg RET)

Marca (con *) todos los archivos cuyo contenido coincida con la expresión regular regexp (dired-mark-files-containing-regexp+). Este comando es como % m, excepto que busca el contenido del archivo en lugar del nombre del archivo. Tenga en cuenta que si un archivo es visitado en un búfer de Emacs, y dired-always-read-filesystem es nil (por defecto), este comando buscará en el búfer sin volver a visitar el archivo, por lo que los resultados pueden ser inconsistentes con el archivo en disco si su contenido ha cambiado desde la última vez que fue visitado. Si no desea esto, puede revertir los archivos que ha visitado en sus búferes, o activar el modo Auto-Revertir (Auto-Revert mode) en esos búferes, antes de invocar este comando. Consulte 19.4 Revertir un Búfer. Si prefiere que este comando siempre vuelva a visitar el archivo, sin tener que revertir el archivo o activar el modo Auto-Revertir, es posible que desee establecer dired-always-read-filesystem como no nulo.

Ctrl/ (C-/)
Ctrl-x u (C-x u)
Ctrl-_ (C-_)

Deshace cambios en el búfer de Dired, como añadir o eliminar marcas (dired-undo). Este comando no revierte las operaciones reales de archivo, ¡Ni recupera archivos perdidos! Sólo deshace los cambios en el propio búfer.

En algunos casos, usar esto después de comandos que operan sobre archivos puede causar problemas. Por ejemplo, después de renombrar uno o más archivos, dired-undo restaura los nombres originales en el búfer de Dired, lo que desincroniza el búfer de Dired con el contenido real del directorio.

31.7 Operar con Archivos

Esta sección describe los comandos básicos de Dired para operar sobre uno o varios archivos. Todos estos comandos van en mayúsculas; todos ellos usan el minibúfer, ya sea para leer un argumento o para pedir confirmación, antes de actuar. Todos ellos le permiten especificar los archivos a manipular de estas formas:

  • Si le da al comando un argumento numérico de prefijo n, opera en los siguientes n archivos, empezando por el archivo actual. (Si n es negativo, el comando opera en los -n archivos anteriores a la línea actual).

  • De lo contrario, si algunos archivos están marcados con *, el comando opera en todos esos archivos.

  • En caso contrario, el comando actúa sólo sobre el archivo actual.

Algunos otros comandos Dired, como ! y %, usan las mismas convenciones para decidir sobre qué archivos trabajar.

Además de los comandos Dired descritos aquí, también es posible invocar comandos de Control de Versiones (CV) sobre uno o más archivos mostrados en un búfer Dired. Véase 29.1 Control de Versiones.

Los comandos que piden un directorio de destino, como los que copian y renombran archivos o crean enlaces para ellos, intentan adivinar el directorio de destino por defecto para la operación. Normalmente, sugieren el directorio por defecto del búfer de Dired, pero si la opción dired-dwim-target no es nula, y si hay otro búfer de Dired mostrado en alguna ventana, el directorio de ese otro búfer es sugerido en su lugar. Puede personalizar dired-dwim-target para que prefiera la siguiente ventana con un búfer Dired, o la ventana utilizada más recientemente con un búfer Dired, o para usar cualquier otra función. Cuando el valor es una función, se llamará sin argumentos y se espera que devuelva una lista de directorios que se usarán por defecto (es decir, objetivo por defecto e «historia futura»).

Estos son los comandos de Dired que manipulan archivos y operan sobre ellos.

Ctrl nuevo RETURN (C nuevo RET)

Copia los archivos especificados (dired-do-copy). El argumento nuevo es el directorio en el que se va a copiar, o (si se copia un único archivo) el nuevo nombre. Es como el comando de shell cp.

La opción dired-create-destination-dirs controla si Dired debe crear directorios inexistentes en el destino al copiar/renombrar archivos. El valor por defecto nil significa que Dired nunca crea dichos directorios inexistentes; el valor always, significa que Dired los crea automáticamente; el valor ask significa que Dired le pide confirmación antes de crearlos.

Si la opción dired-create-destination-dirs-on-trailing-dirsep es distinta de nil, además de dired-create-destination-dirs, un separador de directorio al final del directorio de destino es tratado de forma especial. En ese caso, cuando se copia a test/ y no existe ya el directorio test, éste se creará y los archivos o directorios de origen especificados se copiarán en el directorio recién creado.

Si dired-copy-preserve-time no es nulo, al copiar con este comando se conserva la hora de modificación del archivo antiguo en la copia, como en cp -p.

La variable dired-recursive-copies controla si se copian directorios recursivamente (como cp -r). Por defecto es top, lo que significa preguntar antes de copiar recursivamente un directorio.

La variable dired-copy-dereference controla si se copian los enlaces simbólicos como enlaces o después de hacer referencia a ellos (como cp -L). Por defecto es nil, lo que significa que los enlaces simbólicos se copian creando otros nuevos.

La opción de usuario dired-keep-marker-copy controla cómo este comando maneja el marcado de archivos. Por defecto, todas las nuevas copias de archivos se marcan con una C.

D (D)

Elimina los archivos especificados (dired-do-delete). Es como el comando rm del shell.

Al igual que los otros comandos de esta sección, este comando opera sobre los archivos marcados, o los n archivos siguientes. Por el contrario, ``x (``dired-do-flagged-delete) borra todos los archivos marcados.

R nuevo RETURN (R nuevo RET)

Renombra los archivos especificados (dired-do-rename). Si renombra un único archivo, el argumento nuevo es el nuevo nombre del archivo. Si renombra varios archivos, el argumento nuevo es el directorio al que se moverán los archivos (es como el comando de shell mv).

La opción dired-create-destination-dirs controla si Dired debe crear directorios inexistentes en nuevo.

La opción dired-create-destination-dirs-on-trailing-dirsep, cuando se establece además de dired-create-destination-dirs, controla si un separador de directorio al final del destino es tratado de forma especial. En ese caso, cuando se renombra un directorio anterior a nuevo/ y no existe ya un directorio nuevo, éste se creará y anterior se moverá al directorio recién creado. En caso contrario, anterior se renombra a nuevo.

Dired cambia automáticamente el nombre del archivo visitado de los búferes asociados a los archivos renombrados para que hagan referencia a los nuevos nombres.

Si el valor de la variable dired-vc-rename-file no es nulo, los archivos se renombran usando los comandos del VCS subyacente, a través de vc-rename-file (ver 29.1.12.2 Borrar y Renombrar Archivos Controlados por Versión).

H nuevo RETURN (H nuevo RET)

Crea enlaces duros a los archivos especificados (dired-do-hardlink). Es como el comando de shell ln. El argumento nuevo es el directorio en el que se crearán los enlaces, o (si sólo se crea un enlace) el nombre que se le dará al enlace.

Shift nuevo RETURN (S nuevo RET)

Crea enlaces simbólicos a los archivos especificados (dired-do-symlink). Es como ln -s. El argumento nuevo es el directorio en el que se crearán los enlaces, o (si sólo se crea un enlace) el nombre que se le dará al enlace.

Y nuevo RETURN (Y nuevo RET)

Crea enlaces simbólicos relativos a los archivos especificados (dired-do-relsymlink). El argumento nuevo es el directorio en el que se crearán los enlaces, o (si sólo se crea un enlace) el nombre que se le dará al enlace. Es como dired-do-symlink pero puede crear enlaces simbólicos relativos. Por ejemplo:

foo -> ../bar/foo

No se pueden crear enlaces absolutos como:

foo ->/ruta/que/puede/cambiar/cualquier/dia/bar/foo

Alt-x modoespecial RETURN (M modoespecial RET)

Cambia el modo (también llamado bits de permiso) de los archivos especificados (dired-do-chmod). modoespecial puede estar en notación octal o simbólica, como los argumentos manejados por el programa chmod. Este comando no sigue los enlaces simbólicos, por lo que informa de un error si intenta cambiar el modo de un enlace simbólico en una plataforma en la que dichos modos son inmutables.

G nuevogrupo RETURN (G nuevogrupo RET)

Cambia el grupo de los archivos especificados a nuevogrupo (dired-do-chgrp).

O nuevodueño RETURN (O nuevodueño RET)

Cambia el propietario de los archivos especificados a nuevopropietario (dired-do-chown). (En la mayoría de los sistemas, sólo el superusuario puede hacer esto).

La variable dired-chown-program especifica el nombre del programa a usar para hacer el trabajo. (Esta variable es necesaria porque diferentes sistemas ponen chown en diferentes lugares).

T marca-de-tiempo RETURN (T marca-de-tiempo RET)

Toca los archivos especificados (dired-do-touch). Esto significa actualizar sus tiempos de modificación a marca-de-tiempo, que por defecto es la hora actual. Es como el comando de shell touch.

P comando RETURN (P comando RET)

Imprime los archivos especificados (dired-do-print). Debe especificar el comando para imprimirlos, pero el minibúfer comienza con una suposición adecuada hecha usando las variables lpr-command y lpr-switches (las mismas variables que usa lpr-búfer; vea 41 Impresión de Copias en Papel).

Z (Z)

Comprime los archivos especificados (dired-do-compress). Si el archivo ya parece estar comprimido, en su lugar lo descomprime. Cada archivo marcado se comprime en su propio archivo; esto usa el programa gzip si está disponible, de lo contrario usa compress.

En un nombre de directorio, este comando produce un archivo comprimido dependiendo de la opción de usuario dired-compress-directory-default-suffix. El valor predeterminado es un archivo .tar.gz que contiene todos los archivos del directorio, ejecutando el comando tar con la salida dirigida a gzip. Para permitir la descompresión de directorios comprimidos, teclear Z (Z) en un archivo .tar.gz o .tgz descomprime todos los ficheros del archivo en un directorio cuyo nombre es el nombre del archivo sin la extensión.

c (c)

Comprime los archivos especificados (dired-do-compress-to) en un único archivo en cualquier parte del sistema de archivos. El archivo predeterminado se controla mediante la opción de Usuario dired-compress-directory-default-suffix. Véase también dired-compress-files-alist.

:d (:d)

Desencripta los archivos especificados (epa-dired-do-decrypt). Ver Integración de Dired en el Manual de Usuario del Asistente EasyPG.

:v (:v)

Verifica las firmas digitales de los archivos especificados (epa-dired-do-verify). Ver Integración de Dired en el Manual de Usuario del Asistente EasyPG.

:s (:s)

Firma digitalmente los archivos especificados (epa-dired-do-sign). Consulte Integración de Dired en el Manual de Usuario del Asistente EasyPG.

:e (:e)

Cifra los archivos especificados (epa-dired-do-encrypt). Ver Integración de Dired en el Manual de Usuario del Asistente EasyPG.

L (L)

Carga los archivos Emacs Lisp especificados (dired-do-load). Véase 28.8 Bibliotecas de Código Lisp para Emacs.

B (B)

Compila por bytes los archivos Emacs Lisp especificados (dired-do-byte-compile). Véase Compilación por Byte en el Manual de Referencia de Emacs Lisp.

I (I)

Ejecuta Info en este archivo (se supone que es un archivo en formato Info).

N (N)

Ejecuta man en este archivo (se supone que es un archivo en formato nroff).

A expreg RETURN (A expreg RET)

Busca en todos los archivos especificados la expresión regular expreg (dired-do-find-regexp).

Este comando es una variante de xref-find-references (ver 29.4.1.3. Buscar y Reemplazar con Identificadores), muestra el búfer *xref*, donde puede navegar entre las coincidencias y mostrarlas según sea necesario usando los comandos descritos en Comandos disponibles en el búfer *xref*.

Si alguno de los archivos marcados son directorios, este comando busca recursivamente en todos los archivos de esos directorios y en cualquiera de sus subdirectorios, excepto en los archivos cuyos nombres coincidan con grep-find-ignored-files y en los subdirectorios cuyos nombres coincidan con grep-find-ignored-directories.

Q expreg RETURN cadena RETURN
(Q expreg RET cadena RET)

Realiza query-replace-regexp en cada uno de los archivos especificados, sustituyendo las coincidencias de expreg por cadena (dired-do-find-regexp-and-replace).

Este comando es una variante de xref-query-replace-in-results. Presenta un búfer *xref* que enumera todas las coincidencias de expreg, y puede usar los comandos especiales de ese búfer (consulte 29.4.1.2 Comandos Disponibles en el Búfer *xref*). En particular, si sale del bucle de reemplazo de la consulta, puede usar r en ese búfer para reemplazar más coincidencias. Consulte 29.4.1.3. Buscar y Reemplazar con Identificadores.

Al igual que con dired-do-find-regexp, si alguno de los archivos marcados son directorios, este comando realiza reemplazos en todos los archivos de esos directorios, y en cualquiera de sus subdirectorios, recursivamente, excepto para archivos cuyos nombres coincidan con grep-find-ignored-files y subdirectorios cuyos nombres coincidan con grep-find-ignored-directories.

31.8 Comandos Shell en Dired

El comando Dired ! (dired-do-shell-command) lee una cadena de comandos shell en el minibúfer, y ejecuta ese comando shell en uno o más archivos. Los archivos sobre los que opera el comando shell se determinan de la forma habitual para los comandos Dired (ver 31.7 Operar con Archivos). El comando X es un sinónimo de !.

El comando & (dired-do-async-shell-command) hace lo mismo, excepto que ejecuta el comando shell de forma asíncrona. (También se puede hacer esto con !, añadiendo un carácter & al final del comando shell). Cuando el comando opera sobre más de un archivo, ejecuta múltiples copias paralelas del comando shell especificado, una para cada archivo. Como excepción, si el comando shell especificado termina en ; o ;&, el comando shell se ejecuta en segundo plano en cada archivo secuencialmente; Emacs espera a que termine cada comando shell invocado antes de ejecutar el siguiente.

Tanto para ! como para &, el directorio de trabajo para el comando shell es el directorio de nivel superior del búfer Dired.

Si se indica a ! o & que operen sobre más de un archivo, la cadena del comando shell determina cómo se pasan esos archivos al comando shell:

  • Si usa * rodeado de espacios en blanco en la cadena de comandos, entonces el comando se ejecuta una sola vez, con la lista de nombres de archivo sustituida por el *. El orden de los nombres de archivo es el orden de aparición en el búfer de Dired.

    Así, ! tar cf foo.tar * RET ejecuta tar en toda la lista de nombres de archivo, colocándolos en un archivo tar foo.tar.

    Si desea usar * como comodín del shell con espacios en blanco alrededor, escriba *"" (*""). En el shell, esto es equivalente a *; pero como el * no está rodeado de espacios en blanco, Dired no lo trata de forma especial. Emacs le pedirá confirmación si hace esto, a menos que dired-confirm-shell-command sea nil.

  • De lo contrario, si la cadena de comandos contiene ? rodeado de espacios en blanco o `?`, Emacs ejecuta el comando shell una vez por cada archivo, sustituyendo el nombre de archivo actual por ? y `?` cada vez. Puede usar ? y `?` más de una vez en el comando; el mismo nombre de archivo sustituye cada vez. Si los mezcla con *, el comando indicará un error.

  • Si la cadena de comandos no contiene ni * ni ? ni `?`, Emacs ejecuta el comando shell una vez por cada archivo, añadiendo el nombre del archivo al final. Por ejemplo, ! uudecode RET ejecuta uudecode en cada archivo.

Para iterar sobre los nombres de archivo de una manera más detallada, es posible que prefiera usar un bucle shell explícito. Por ejemplo, a continuación se muestra cómo «uuencodificar» cada archivo, obteniendo el nombre del archivo de salida añadiendo .uu al nombre del archivo de entrada:

for file in * ; do uuencode "$file" "$file" >"$file".uu; done

El mismo ejemplo con la notación `?`:

uuencode ? ? > `?`.uu

Los comandos ! y & no intentan actualizar el búfer de Dired para mostrar archivos nuevos o modificados, porque no saben qué archivos se modificarán. Use el comando g para actualizar el búfer de Dired (ver 31.16. Actualizar el Búfer de Dired).

Consulte 39.1 Comandos de shell Simples, para obtener información sobre la ejecución de comandos de shell fuera de Dired.

31.9 Proponer comandos de shell

Basándose en el nombre de un archivo, Dired intenta adivinar qué comando de shell es posible que quiera aplicar. Por ejemplo, si ha apuntado a un archivo llamado foo.tar y pulsa !, Dired adivinará que quiere ejecutar tar xvf, y le sugerirá ese como el comando shell por defecto.

Puede teclear Alt-n (M-n) para obtener el comando por defecto en el minibúfer para su edición. Si hay varios comandos para un archivo dado, escriba Alt-n (M-n) varias veces para ver cada comando coincidente en orden.

Dired sólo intenta adivinar un comando para un único archivo, nunca para una lista de archivos marcados.

Variable: dired-guess-shell-alist-default

Esta variable especifica las reglas predefinidas para adivinar comandos de shell adecuados para ciertos archivos. Establézcala a nil para desactivar la posibilidad de adivinar comandos. Los elementos de dired-guess-shell-alist-user (definidos por el Usuario) anularán estas reglas.

Variable: dired-guess-shell-alist-user

Si no es nula, esta variable especifica la lista definida por el Usuario de expresiones regulares de archivo y sus comandos sugeridos. Estas reglas tienen prioridad sobre las reglas predefinidas en la variable dired-guess-shell-alist-default cuando se ejecuta dired-do-shell-command). El valor por defecto es nil.

Cada elemento de la lista tiene el siguiente aspecto

(expreg comando)

donde cada comando puede ser una cadena o una expresión Lisp que se evalúe como una cadena. Si se dan varios comandos, todos ellos pasarán temporalmente al historial.

Un * en el comando del intérprete de órdenes representa el nombre del archivo que coincide con la expresión regular. Cuando Emacs invoca el comando, reemplaza cada instancia de * con el nombre de archivo coincidente.

Para añadir reglas para las extensiones de archivo '.foo' y '.bar', añada esto a su archivo Init:

 (setq dired-guess-shell-alist-user
       (list
        (list "\\.foo$" "foo-command") ; regla fija
        ;; posiblemente más reglas...
        (list "\\.bar$" ; regla con condición test
               '(if condición
                    "comando-bar-1"
                    "comando-bar-2"))))

Esto anulará cualquier regla predefinida para las mismas extensiones.

Puede encontrar más opciones de Usuario con M-x customize-group RET dired-guess RET.

31.10 Transformación de Nombres de Archivos en Dired

Esta sección describe los comandos de Dired que modifican los nombres de los archivos de forma sistemática. Cada comando opera sobre algunos o todos los archivos marcados, usando un nuevo nombre hecho mediante la transformación del nombre existente.

Al igual que los comandos básicos de Dired para la manipulación de archivos (véase 31.7 Operar con Archivos), los comandos descritos aquí operan sobre los n archivos siguientes, o sobre todos los archivos marcados con *, o sobre el archivo actual. (Para marcar archivos, use los comandos descritos en 31.6 Marcas vs. Banderas).

Todos los comandos descritos en esta sección funcionan de forma interactiva: le piden que confirme la operación para cada archivo candidato. Por lo tanto, puede seleccionar más archivos de los que realmente necesita (por ejemplo, con una expresión regular que coincida con muchos archivos) y, a continuación, filtrar los nombres seleccionados escribiendo y o n cuando el comando le pida confirmación.

%u (% u)

Cambia el nombre de cada uno de los archivos seleccionados a un nombre en mayúsculas. Si los antiguos nombres de archivo son Foo y bar, los nuevos nombres serán FOO y BAR.

%l (% l)

Cambia el nombre de cada uno de los archivos seleccionados a un nombre en minúsculas (dired-downcase). Si los antiguos nombres de archivo son Foo y ``bar, los nuevos nombres serán foo y bar.

%R de RETURN a RETURN (% R de RET a RET)
%C de RETURN a RETURN (% C de RET a RET)
%H de RETURN a RETURN (% H de RET a RET)
%S de RETURN a RETURN (% S de RET a RET)
%Y de RETURN a RETURN (% Y de RET a RET)

Estos cinco comandos renombran, copian, crean: enlaces duros, enlaces blandos y enlaces blandos relativos, calculando en cada caso el nuevo nombre por sustitución de expresiones regulares a partir del nombre del archivo anterior.

Los cuatro comandos de sustitución por expresiones regulares realizan una búsqueda y sustitución de los nombres de archivo seleccionados. Leen dos argumentos: una expresión regular de y un patrón de sustitución a; comparan cada nombre de archivo antiguo con de y sustituyen la parte coincidente por a. Puede usar \& y \digit en to para referirse a todo o parte de lo que el patrón coincidió en el nombre del archivo antiguo, como en replace-regexp (vea 16.10.2. Reemplazo de Expresiones Regulares (expreg)). Si la expresión regular coincide más de una vez en un nombre de archivo, sólo se sustituye la primera coincidencia.

Por ejemplo, % R ^.*$ RET x-\& RET cambia el nombre de cada archivo seleccionado añadiendo x- a su nombre. También es posible la operación inversa, es decir, elimina la x- de cada nombre de archivo: un método es % R ^x-\(.*\)$ RET \1 RET; otro es % R ^x- RET RET. ( Use ^ y $ para anclar coincidencias que deben abarcar todo el nombre del archivo).

Normalmente, el proceso de sustitución no tiene en cuenta los nombres de directorio de los archivos; opera sobre el nombre del archivo dentro del directorio. Si especifica un argumento numérico igual a cero, la sustitución afecta a todo el nombre absoluto del archivo, incluido el nombre del directorio. (Un argumento distinto de cero especifica el número de archivos sobre los que operar).

Puede que desee seleccionar el conjunto de archivos sobre los que operar usando la misma expreg de la que usará para operar sobre ellos. Para hacer esto, marque esos archivos con % m de RET, luego use la misma expresión regular en el comando para operar sobre los archivos. Para hacer esto más conveniente, los comandos % para operar sobre archivos usan por defecto la última expresión regular especificada en cualquier comando %.

31.11 Comparación de Archivos con Dired

El comando = (dired-diff) compara el archivo actual (el archivo en el punto) con otro archivo (leído usando el minibúfer) usando el programa diff. El archivo especificado con el minibúfer es el primer argumento de diff, y el archivo en el punto es el segundo argumento. La salida del programa diff se muestra en un búfer usando el modo Diff (ver 19.9 Comparación de Archivos).

Si la región está activa, el valor por defecto para el archivo leído usando el minibúfer es el archivo en la marca (es decir, la marca ordinaria de Emacs, no una marca de Dired; véase 12.1 Fijar la Marca). De otro modo, si el archivo en el punto tiene un archivo de respaldo (vea 19.3.2 Archivos de Copia de Seguridad), ese es el predeterminado.

También puede comparar archivos usando ediff-files, vea Puntos de Entrada Principales en el Manual de Usuario de Ediff.

31.12. Subdirectorios en Dired

Un búfer Dired normalmente muestra sólo un directorio, pero opcionalmente puede incluir también sus subdirectorios.

La forma más sencilla de incluir múltiples directorios en un búfer de Dired es especificar las opciones -lR para ejecutar ls. (Si da un argumento numérico cuando ejecuta Dired, entonces puede especificar estas opciones en el minibúfer). Eso produce un listado recursivo de directorios mostrando todos los subdirectorios en todos los niveles.

Más a menudo, querrá mostrar sólo subdirectorios específicos. Puede hacerlo con i (dired-maybe-insert-subdir):

i (i)

Inserta el contenido de un subdirectorio más adelante en el búfer.

Si usa este comando en una línea que describe un archivo que es un directorio, inserta el contenido de ese directorio en el mismo búfer de Dired, y se desplaza hasta allí. El contenido del subdirectorio insertado sigue al directorio de nivel superior del búfer Dired, igual que en la salida ls -lR.

Si el contenido del subdirectorio ya está presente en el búfer, el comando i simplemente se mueve a él.

En cualquier caso, i pone la marca Emacs antes de moverse, así que C-u C-SPC vuelve a su posición anterior en el búfer Dired (ver 12.1 Fijar la Marca). También puede usar ^ para volver al directorio padre en el mismo búfer de Dired (ver 31.5 Visitar Archivos en Dired).

Use el comando l (dired-do-redisplay) para actualizar el contenido del subdirectorio, y use C-u k en la línea de cabecera del subdirectorio para eliminar el listado del subdirectorio (ver 31.16. Actualizar el Búfer de Dired). También puede ocultar y mostrar los subdirectorios insertados (consulte 31.15 Ocultar Subdirectorios).

31.13 Interruptores de Subdirectorio en Dired

Puede insertar subdirectorios con los modificadores (switeches) ls especificados en los buffers de Dired usando C-u i. Puede cambiar los modificadores ls de un subdirectorio ya insertado en un punto usando C-u l.

Dired conserva los modificadores si revierte el búfer. Borrar un subdirectorio implica deshacerse de dichos switches (conmutadores).

Usar dired-undo (ver 31.6 Marcas vs. Banderas) para reinsertar o borrar subdirectorios que fueron insertados con switches explícitos puede evitar la maquinaria de Dired para recordar (u olvidar) los switches (modificadores). Borrar un subdirectorio usando dired-undo no olvida esas opciones. Cuando se reinserte más tarde usando i, se reinsertará usando sus antiguas opciones. Usar dired-undo para reinsertar un subdirectorio que fue borrado usando los comandos Dired normales (no dired-undo) lo insertará originalmente con sus antiguos interruptores. Revertir el búfer, sin embargo, lo volverá a listar usando los modificadores por defecto del búfer. Si algo de esto da problemas, puede corregir fácilmente la situación usando C-u i o C-u l.

Dired no recuerda el modificador R. Insertar un subdirectorio con opciones que incluyan a dicho modificador equivale a insertar cada uno de sus subdirectorios usando todas las opciones restantes. Por ejemplo, actualizar o eliminar un subdirectorio que se insertó con el modificador R no actualizará ni eliminará sus subdirectorios.

Los modificadores predeterminados del búfer no afectan a los subdirectorios que se insertaron usando modificadores especificados explícitamente. En particular, los comandos como s que cambian los modificadores del búfer no afectan a dichos subdirectorios. (Sin embargo, sí afectan a los subdirectorios sin modificadores asignados explícitamente).

Puede hacer que Dired se olvide de todos los switches (modificadores) de subdirectorios y vuelva a listar todos los subdirectorios con los modificadores por defecto del búfer usando M-x dired-reset-subdir-switches. Esto también revierte el búfer de Dired.

31.14 Moverse por Subdirectorios

Cuando un búfer Dired lista subdirectorios, puede usar los comandos de movimiento de página C-x [ y C-x ] para moverse por directorios completos (ver 26.4 Páginas).

Los siguientes comandos se mueven a través, arriba y abajo en el árbol de directorios dentro de un búfer Dired. Se mueven a las líneas de cabecera de directorio, que son las líneas que dan el nombre a un directorio, al principio del contenido del directorio.

Ctrl-Alt-n (C-M-n)

Va a la siguiente línea de cabecera de subdirectorio, independientemente del nivel (dired-next-subdir).

Ctrl-Alt-p (C-M-p)

Va a la línea de cabecera del subdirectorio anterior, independientemente del nivel (dired-prev-subdir).

Ctrl-Alt-u (C-M-u)

Sube a la línea de cabecera del directorio padre (dired-tree-up).

Ctrl-Alt-d (C-M-d)

Desciende en el árbol de directorios, hasta la línea de cabecera del primer subdirectorio (dired-tree-down).

< (<)

Avanza hasta la línea de archivo-directorio anterior (dired-prev-dirline). Estas líneas son las que describen un directorio como archivo en su directorio padre.

> (>)

Desciende a la siguiente línea de archivo de directorio (dired-next-dirline).

Alt-G (M-G)

Pregunta por un directorio y se mueve a su línea de directorio-archivo (dired-goto-subdir).

31.15 Ocultar Subdirectorios

Ocultar un subdirectorio significa hacerlo invisible, excepto su línea de cabecera.

$ ($)

Oculta o muestra el subdirectorio en el que se encuentra el punto, y mueve el punto al siguiente subdirectorio (dired-hide-subdir). Esto es una conmutación. Un argumento numérico sirve como contador de repeticiones.

Alt-$ (M-$)

Oculta todos los subdirectorios de este búfer Dired, dejando sólo sus líneas de cabecera (dired-hide-all). O, si algún subdirectorio está actualmente oculto, vuelve a hacer visibles todos los subdirectorios. Puede usar este comando para obtener una visión general en árboles de directorios muy profundos o para moverse rápidamente a subdirectorios lejanos.

Los comandos ordinarios de Dired nunca tienen en cuenta los archivos dentro de un subdirectorio oculto. Por ejemplo, los comandos para operar sobre archivos marcados ignoran los archivos en directorios ocultos aunque estén marcados. Por lo tanto, puede usar la opción de ocultamiento para excluir temporalmente subdirectorios de las operaciones sin tener que eliminar las marcas de Dired en los archivos de esos subdirectorios.

Vea 31.12. Subdirectorios en Dired, para saber cómo insertar un listado de subdirectorios, y vea 31.16. Actualizar el Búfer de Dired, para saber cómo borrarlo.

31.16. Actualizar el Búfer de Dired

Esta sección describe órdenes para actualizar el búfer Dired para reflejar cambios externos (no Dired) en los directorios y archivos, y para borrar parte del búfer Dired.

g (g)

Actualiza todo el contenido del búfer Dired (revert-buffer).

l (l)

Actualiza los archivos especificados (dired-do-redisplay). Se especifican los archivos para l del mismo modo que para las operaciones de archivo.

k (k)

Elimina las líneas de archivo especificadas, no los archivos, sólo las líneas (dired-do-kill-lines).

s (s)

Alterna entre el orden alfabético y el orden fecha/hora (dired-sort-toggle-or-edit).

Ctrl-us conmutadores (C-u s conmutadores RET)

Refresca el búfer Dired usando interruptores como dired-listing-switches.

Escriba g (g, revert-buffer) para actualizar el contenido del búfer Dired, basándose en los cambios en los archivos y directorios listados. De este modo se conservan todas las marcas excepto las de los archivos que han desaparecido. Los subdirectorios ocultos se actualizan pero permanecen ocultos.

Para actualizar sólo algunos de los archivos, escriba l (l, dired-do-redisplay). Al igual que los comandos de Dired que operan con archivos, este comando opera sobre los n archivos siguientes (o -n archivos anteriores), o sobre los archivos marcados si los hay, o sobre el archivo actual. Actualizar los archivos significa leer su estado actual, y luego actualizar sus líneas en el búfer para indicar ese estado.

Si usa l en una línea de cabecera de subdirectorio, actualiza el contenido del subdirectorio correspondiente.

Si usa C-x d o algún otro comando de Dired para visitar un directorio que ya se está mostrando en un búfer de Dired, Dired cambia a ese búfer pero no lo actualiza. Si el búfer no está actualizado, Dired muestra una advertencia diciéndole que teclee g (g) para actualizarlo. También puede decirle a Emacs que revierta cada búfer Dired automáticamente cuando vuelva a visitarlo, estableciendo la variable dired-auto-revert-buffer a un valor no nulo.

Para borrar líneas de archivo del búfer -sin borrar realmente los archivos- teclee k (k, dired-do-kill-lines). Al igual que los comandos que operan con archivos, este comando opera sobre los n archivos siguientes, o sobre los archivos marcados si los hubiera. Sin embargo, no opera sobre el archivo actual, ya que de lo contrario teclear mal k podría ser molesto.

Si usa k para eliminar la línea de un archivo de directorio que había insertado en el búfer de Dired como subdirectorio (véase 31.12. Subdirectorios en Dired), elimina también el listado de subdirectorios. Escribir Ctrl-u k (C-u k) en la línea de cabecera de un subdirectorio también elimina la línea del subdirectorio del búfer de Dired.

La orden g recupera las líneas individuales que haya eliminado de esta forma, pero no los subdirectorios; debe usar i para reinsertar un subdirectorio.

Los archivos en los búferes de Dired se listan normalmente en orden alfabético por nombres de archivo. Alternativamente Dired puede ordenarlos por fecha/hora. El comando s de Dired (dired-sort-toggle-or-edit) cambia entre estos dos modos de ordenación. La línea de modo de un búfer Dired indica el modo en que está ordenado: por nombre o por fecha.

C-u s conmutador RET permite especificar un nuevo valor para dired-listing-switchs.

31.17 Dired y Find (Buscar)

Puede seleccionar un conjunto de archivos para mostrarlos en un búfer Dired de forma más flexible usando la utilidad find para elegir los archivos.

Para buscar archivos con nombres que coincidan con un patrón comodín use M-x find-name-dired. Lee los argumentos directorio y patrón, y selecciona todos los archivos del directorio o de sus subdirectorios cuyos nombres individuales coincidan con el patrón.

Los archivos seleccionados se muestran en un búfer de Dired, en el que están disponibles los comandos normales de Dired.

Si desea comprobar el contenido de los archivos, en lugar de sus nombres, use M-x find-grep-dired. Este comando lee dos argumentos del minibúfer, directorio y expreg; elige todos los archivos del directorio o sus subdirectorios que contienen una coincidencia para expreg. Funciona ejecutando los programas find y grep. Véase 28.4 Buscar con Grep en Emacs. Recuerde escribir la expresión regular para grep, no para Emacs. (Un método alternativo para mostrar archivos cuyo contenido coincide con una expresión regular dada es el comando % g expreg, ver 31.6 Marcas vs. Banderas).

El comando más general de esta serie es M-x find-dired, que permite especificar cualquier condición que find pueda probar. Toma dos argumentos del minibúfer, directorio y find-args; ejecuta find en el directorio, pasando find-args para decirle a find qué condición debe probar. Para usar este comando, necesita saber cómo usar find.

El formato del listado producido por estos comandos está controlado por la variable find-ls-option. Se trata de un par de opciones; la primera especifica cómo llamar a find para producir el listado del archivo, y la segunda le dice a Dired que analice la salida.

El comando M-x locate proporciona una interfaz similar al programa locate. M-x locate-with-filter es similar, pero mantiene sólo los archivos cuyos nombres coinciden con una expresión regular dada.

Estos búferes no funcionan del todo como los búferes ordinarios de Dired: las operaciones con archivos funcionan, pero no siempre actualizan automáticamente el búfer. Revertir el búfer con g borra todos los subdirectorios insertados, y borra todas las banderas y marcas.

31.18 Editar el Búfer Dired

Wdired es un modo especial que le permite realizar operaciones de archivo editando directamente el búfer Dired (la «W» de «Wdired» significa «writable», escribible). Para entrar en el modo Wdired, teclee Ctrl-x Ctrl-q (C-x C-q , dired-toggle-read-only) mientras esté en un búfer Dired. También puede usar el ítem del menú: Immediate / Edit File Names (Inmediato / Editar nombres de archivo).

En modo Wdired, puede renombrar archivos editando los nombres de archivo que aparecen en el búfer Dired. Para ello están disponibles todos los comandos de edición habituales de Emacs, incluidas las operaciones con rectángulos y la consulta-sustitución. Una vez que haya terminado de editar, escriba Ctrl-c Ctrl-c (C-c C-c, wdired-finish-edit). Esto aplica los cambios y vuelve al modo Dired habitual.

Además de renombrar archivos, puede mover un archivo a otro directorio escribiendo el nuevo nombre del archivo (ya sea absoluto o relativo). Para marcar un fichero para su eliminación, borre todo el nombre del fichero. Para cambiar el destino de un enlace simbólico, edite el nombre del destino del enlace que aparece junto al nombre del enlace.

Si edita los nombres de archivo para crear un nuevo subdirectorio, Wdired creará automáticamente estos nuevos directorios. Para evitarlo, ajuste wdired-create-parent-directories a nil.

El resto del texto del búfer, como el tamaño de los archivos y las fechas de modificación, está marcado como de sólo lectura, por lo que no puede editarlo. Sin embargo, si establece wdired-allow-to-change-permissions en t, puede editar los permisos de los archivos. Por ejemplo, puede cambiar -rw-r--r-- a -rw-rw-rw- para hacer que un archivo sea de escritura global. Estos cambios también tendrán efecto cuando escriba Ctrl-c Ctrl-c (C-c C-c).

31.19 Ver Miniaturas de Imágenes en Dired

Image-Dired es una herramienta para navegar por archivos de imagen. Permite ver las imágenes como miniaturas o a tamaño completo, ya sea dentro de Emacs o a través de un visor externo. Esto es diferente del modo Imagen (ver 19.19 Visualización de Archivos de Imagen) para visitar un archivo de imagen en el búfer de Emacs.

Para entrar en Imagen-Dired, marque los archivos de imagen que quiera ver en el búfer Dired, usando m como de costumbre. A continuación, escriba Ctrl-t d (C-t d, image-dired-display-thumbs). Esto crea y cambia a un búfer que contiene Image-Dired, correspondiente a los archivos marcados.

También puede borrar imágenes a través de Image-Dired. Escriba (d, image-dired-flag-thumb-original-file) para marcar el archivo de imagen para su borrado en el búfer Dired. Alternativamente, puede eliminar la miniatura de una imagen del búfer de miniaturas sin marcar la imagen para su eliminación, escribiendo Ctrl-x d (C-d, image-dired-delete-char).

También puede usar Image-Dired para operaciones «en línea» (es decir, directamente en el búfer Dired). Escriba Ctrl-t Ctrl-t (C-t C-t), y las miniaturas de las imágenes seleccionadas en Dired aparecerán delante de sus nombres (image-dired-dired-toggle-marked-thumbs). Ctrl-:kbd.`t` i (C-t i) y Ctrl-t x (C-t x) mostrarán la imagen bajo el punto en Emacs o con el visor externo, respectivamente.

Entre las funciones más avanzadas se incluyen las etiquetas de imagen, que son metadatos usados para categorizar archivos de imagen. Las etiquetas se almacenan en un archivo de texto plano configurado por image-dired-tags-db-file.

Para etiquetar archivos de imagen, márquelos en el búfer de Dired (también puede marcar archivos en Dired desde el búfer de miniaturas tecleando m) y escriba Ctrl-t Ctrl-t (C-t t, image-dired-tag-files). Esto lee el nombre de la etiqueta en el minibúfer. Para marcar archivos con una determinada etiqueta, escriba Ctrl-t f (C-t f, image-dired-mark-tagged-files). Después de marcar archivos de imagen con una etiqueta determinada, puede usar C-t d para verlos.

También puede etiquetar un archivo directamente desde el búfer de miniaturas tecleando tt (t t), y puede eliminar una etiqueta tecleando tr (t r). También hay una etiqueta especial llamada «comment» (comentario) para cada archivo (no es una etiqueta en el mismo sentido que las otras etiquetas, se maneja de forma ligeramente diferente). Se usa para introducir un comentario o descripción sobre la imagen. Para comentar un archivo desde el búfer de miniaturas, escriba c (c). Se le pedirá que escriba un comentario. Escriba Ctrl-t c (C-t c) para añadir un comentario desde Dired (imagen-dired-comentario-archivos). C-t e mostrará un búfer para editar comentarios y etiquetas (image-dired-dired-edit-comment-and-tags).

Los archivos marcados en Dired también se marcarán en Image-Dired si image-dired-thumb-visible-marks no es nulo (que es el valor predeterminado).

Image-Dired también permite manipular imágenes de forma sencilla. En el búfer de miniaturas, escriba L para girar la imagen original 90 grados en el sentido contrario a las agujas del reloj, y R para girarla 90 grados en el sentido de las agujas del reloj. Esta rotación no tiene pérdidas, y usa una utilidad externa llamada jpegtran, que necesita instalar primero.

31.20 Otras Características de Dired

Por defecto, Dired mostrará el espacio disponible en el disco en la primera línea. Este es el primer valor de la variable dired-free-space. Si en lugar de esto lo estableces a separate (separado), Dired mostrará esto en una línea separada (incluyendo el espacio que ocupan los archivos en el directorio actual). Si lo establece a nil, el espacio libre no se mostrará en absoluto.

El comando + (dired-create-directory) lee el nombre de un directorio y lo crea. Señala un error si el directorio ya existe.

El comando dired-create-empty-file lee el nombre de un archivo y lo crea. Si el archivo ya existe, indica un error.

El comando M-s a C-s (dired-do-isearch) inicia una búsqueda incremental de varios archivos en los archivos marcados. Si la búsqueda falla al final de un archivo, al teclear Ctrl-s (C-s) se avanza al siguiente archivo marcado y se repite la búsqueda; al final del último archivo marcado, la búsqueda vuelve al primer archivo marcado. El comando M-s a M-C-s (dired-do-isearch-regexp) hace lo mismo con una búsqueda de expresión regular. Consulte 16.1.2 Repetición de la Búsqueda Incremental, para obtener información sobre la repetición de búsqueda.

El comando w (dired-copy-filename-as-kill) pone los nombres de los archivos marcados (o los n siguientes) en el anillo de muertes, como si los hubiera matado con C-w. Los nombres están separados por un espacio.

Con un argumento de prefijo cero, esto usa el nombre de archivo absoluto de cada archivo marcado. Con sólo C-u como argumento prefijo, usa nombres de archivo relativos al directorio por defecto del búfer Dired. (Como caso especial, si el punto está en una línea de cabecera de directorio, w le da el nombre absoluto de ese directorio. Cualquier argumento de prefijo o archivos marcados son ignorados en este caso.

El propósito principal de este comando es que pueda utilizar los nombres de archivo como argumentos para otros comandos de Emacs. También muestra lo que ha añadido al anillo de muertes, por lo que puede usarlo para mostrar la lista de archivos marcados actualmente en el área de eco.

Si tiene un archivo HTML en el listado de archivos, puede ser útil para ver ese archivo con un navegador. El comando W (browse-url-of-dired-file) usará el navegador estándar configurado para ver ese archivo.

El comando ( (dired-hide-details-mode) cambia si los detalles, como la propiedad o los permisos del archivo, son visibles en el búfer actual de Dired. Por defecto, también oculta los destinos de los enlaces simbólicos, y todas las líneas que no sean la línea de cabecera y los listados de archivos/directorios. Para cambiar esto, personalice las opciones dired-hide-details-hide-symlink-targets y dired-hide-details-hide-information-lines, respectivamente.

Si el directorio que está visitando está bajo control de versiones (ver 29.1 Control de Versiones), entonces los comandos normales de VC diff y log operarán sobre los archivos seleccionados.

El comando M-x dired-compare-directories se usa para comparar el búfer actual de Dired con otro directorio. Marca todos los archivos que difieren entre los dos directorios. Pone estas marcas en todos los búferes de Dired donde estos archivos están listados, lo que por supuesto incluye el búfer actual.

El método de comparación por defecto (usado si teclea RETURN (RET) en el prompt) es comparar sólo los nombres de archivo, los nombres de archivo difieren si no aparecen en el otro directorio. Puede especificar comparaciones más estrictas introduciendo una expresión Lisp, que puede referirse a las variables size1 y size2, los respectivos tamaños de archivo; mtime1 y mtime2, los tiempos de última modificación en segundos, como números de coma flotante; y fa1 y fa2, las respectivas listas de atributos de archivo (devueltas por la función file-attributes). Esta expresión se evalúa para cada par de archivos con nombres similares, y los archivos difieren si el valor de la expresión es distinto de cero.

Por ejemplo, la secuencia M-x dired-compare-directories RET (> mtime1 mtime2) RET marca los archivos más nuevos en este directorio que en el otro, y marca los archivos más antiguos en el otro directorio que en éste. También marca los archivos sin contrapartida, en ambos directorios, como siempre.

En el sistema X Window, Emacs soporta el protocolo de arrastrar y soltar. Puede arrastrar un objeto archivo desde otro programa y soltarlo en un búfer Dired; esto mueve, copia o crea un enlace al archivo en ese directorio. El programa de origen determina exactamente qué acción se lleva a cabo. Arrastrar archivos desde un búfer Dired también está soportado, activando la opción de Usuario dired-mouse-drag-files, el ratón puede ser usado para arrastrar archivos a otros programas. Cuando se establece a link, hará que el otro programa (normalmente un gestor de archivos) cree un enlace simbólico al archivo; cuando se establece a move, hará que el otro programa mueva el archivo a una nueva ubicación, y estableciéndolo a cualquier otro valor no nulo hará que el otro programa abra o cree una copia del archivo. Los modificadores de teclado pulsados durante la operación de arrastrar y soltar también pueden controlar qué acción realiza el otro programa con el archivo.