Как мне распаковать / разархивировать в Emacs

StackOverflow https://stackoverflow.com/questions/1431351

  •  07-07-2019
  •  | 
  •  

Вопрос

Я хотел бы запустить 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 .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top