Как мне распаковать / разархивировать в Emacs
Вопрос
Я хотел бы запустить unzip (или даже zip) в буфере dired или dired-like. Есть что-нибудь подобное? Мне бы хотелось что-то подобное, как в файловом менеджере Nautilus: выбор файлов, а затем нажатие клавиши, чтобы получить эти файлы в новый архивный файл.
Спасибо
Решение
У вас есть варианты ...
Чтобы распаковать файл .zip, вам просто нужно добавить в переменную 'dired-compress-file-суффиксы
(eval-after-load "dired-aux"
'(add-to-list 'dired-compress-file-suffixes
'("\\.zip\\'" ".zip" "unzip")))
Теперь клавиша Z
в dired распознает расширение .zip и распаковывает архив .zip. Уже поддерживаются gunzip
, bunzip2
, распаковка
и dictunzip
.
Если вы хотите пометить файлы и добавить их в ZIP-архив, вы можете использовать следующее для привязки z
к архиву набора отмеченных файлов:
(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<*>quot; 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 " "))
Другие советы
Чтобы заархивировать файлы, откройте каталог в dired. Пометьте файлы, которые вы хотите сжать, m
. Затем введите
! zip foo.zip * <RET>
Чтобы извлечь весь архив из Dired, вы можете пометить файл и запустить & amp; распакуйте
, как в оболочке.
В режиме zip-архива вы можете просматривать zip-файлы в режиме реального времени. Он должен поставляться с последними версиями GNU emacs и будет использоваться по умолчанию при посещении файла с расширением .zip. Из этого режима вы можете извлекать отдельные файлы в буфер, а оттуда сохранять их с помощью C-x C-s
.