¿Cómo descomprimir/descomprimir dentro de Emacs?
zip dired (2)
Para comprimir archivos, abra el directorio en dired. Marque los archivos que desea comprimir con m
. Entonces escribe
! zip foo.zip * <RET>
Para extraer un archivo completo de dired, puede marcar un archivo y ejecutar & unzip
, como lo haría en un shell.
El modo de archivo comprimido le permitirá navegar por los archivos zip de una manera similar a la de un disco. Debería venir con versiones recientes de emacs de GNU y se usará de manera predeterminada cuando visite un archivo con la extensión .zip. Desde este modo, puede extraer archivos individuales en un búfer, y desde allí guardarlos con Cx Cs
.
Me gustaría ejecutar unzip (o incluso zip) dentro de dired o un búfer similar a dired. ¿Hay algo como esto? Me gustaría algo similar como en el administrador de archivos de Nautilus: es decir, seleccionar archivos y luego presionar una tecla para obtener estos archivos en un nuevo archivo.
Gracias
Tienes opciones ...
Para descomprimir un archivo .zip, solo tiene que agregarlo a la variable ''dired-compress-file-suffixes
(eval-after-load "dired-aux"
''(add-to-list ''dired-compress-file-suffixes
''("//.zip//'" ".zip" "unzip")))
Ahora la tecla Z
en dired reconocerá la extensión .zip y descomprimirá un archivo .zip. Ya se admiten gunzip
, bunzip2
, uncompress
y dictunzip
.
Si desea marcar archivos y agregarlos a un archivo comprimido .zip, puede usar lo siguiente para hacer que z
esté obligado a comprimir el conjunto de archivos marcados:
(eval-after-load "dired"
''(define-key dired-mode-map "z" ''dired-zip-files))
(defun dired-zip-files (zip-file)
"Create an archive containing the marked files."
(interactive "sEnter name of zip file: ")
;; create the zip file
(let ((zip-file (if (string-match ".zip$" zip-file) zip-file (concat zip-file ".zip"))))
(shell-command
(concat "zip "
zip-file
" "
(concat-string-list
(mapcar
''(lambda (filename)
(file-name-nondirectory filename))
(dired-get-marked-files))))))
(revert-buffer)
;; remove the mark on all the files "*" to " "
;; (dired-change-marks 42 ?/040)
;; mark zip file
;; (dired-mark-files-regexp (filename-to-regexp zip-file))
)
(defun concat-string-list (list)
"Return a string which is a concatenation of all elements of the list separated by spaces"
(mapconcat ''(lambda (obj) (format "%s" obj)) list " "))