Eliminar en Dired los espacios en los nombres de ficheros
Los archivos nombrados con espacios resultan —es sabido— de lo más incómodo a la hora de bregar en operaciones a
nivel de terminal. En mi trabajo suelo encontrarme demasiado a menudo con directorios enteros plagados de ficheros así,
aunque por suerte contamos con mil y un recursos para reparar tal desaliño de nombres, tanto en la consola como en los
navegadores gráficos de archivos. Como yo casi nunca salgo del navegador de archivos que viene con Emacs, Dired, se me
ocurrió hace poco escribir esta sencilla función para sustituir los espacios de los ficheros que tenemos marcados allí
por el típico y recurrente guión bajo. La función tiene una estructura muy similar a esta otra que describimos aquí, es
decir, saca provecho de intercalar dos listas (archivos viejos con archivos nuevos) gracias a la función -interleave
del paquete dash.el
. Del resto se ocupa el comando de bash
mv
.
Nuestra funcioncilla quedaría, entonces, tal que así:
(defun guiones-dired () (interactive) (let* ((lista-archivos (dired-get-marked-files)) (archivos (mapcar (lambda (x) (replace-regexp-in-string ".+/" "" x)) lista-archivos)) (archivos-nuevos (mapcar (lambda (archivo) (replace-regexp-in-string "\s" "_" archivo)) archivos))) (setq archivos (mapcar (lambda (item) (replace-regexp-in-string "\\(.+\\)" "mv '\\1' " item)) archivos)) (setq archivos-nuevos (mapcar (lambda (item) (replace-regexp-in-string "\\(.+\\)" "\\1\n" item)) archivos-nuevos)) (setq lista-archivos-res (-interleave archivos archivos-nuevos)) (shell-command (mapconcat 'identity lista-archivos-res " ")) (revert-buffer)))
Y como un gif vale más que mil palabras:
∞
Publicado: 04/01/20
Última actualización: 21/01/22
Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.