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

" 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: