2009-09-16 15 views
17

Vorrei eseguire unzip (o anche zip) all'interno di un buffer dired o un buffer simile a quello diretto. C'è qualcosa di simile? Vorrei qualcosa di simile come nel file manager Nautilus: cioè, selezionare i file e quindi premere un tasto per ottenere questi file in un nuovo file di archivio.Come decomprimere/decomprimere in Emacs

Grazie

risposta

26

opzioni hai ...

per decomprimere un file .zip, è solo bisogno di aggiungere alla variabile 'dired-compress-file-suffixes

(eval-after-load "dired-aux" 
    '(add-to-list 'dired-compress-file-suffixes 
       '("\\.zip\\'" ".zip" "unzip"))) 

Ora la chiave Z in dired riconoscerà il .zip estensione e decomprimi un archivio .zip. Già supportati sono gunzip, bunzip2, uncompress e dictunzip.

Se si desidera contrassegnare i file e aggiungerli a un .zip archivio è possibile utilizzare il seguente per fare z legato a zip l'insieme di file selezionati:

(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 " ")) 
+0

non 'Z' farlo fuori -of-the-box? (o contrassegnalo con 'm' e quindi premi 'Z'). Ricordo che ha funzionato per me un po 'di tempo fa. L'ho visto qui: http://xahlee.org/emacs/file_management.html – hatmatrix

+1

'Z' comprimerà i file, ognuno di essi individualmente. Non li aggiunge ad un archivio/zip. –

+0

Sembra concat-string-list non esiste: concat: definizione di funzione di Symbol è nullo: concat-string-list –

16

Per comprimere i file, aprire la directory in Dired. Segna i file che vuoi comprimere con m. Quindi digitare

! zip foo.zip * <RET> 

Per estrarre un intero archivio da dired è possibile contrassegnare un file ed eseguire & unzip, proprio come si farebbe in un guscio.

zip-archive mode ti permetterà di sfogliare i file zip in un modo simile a quello di una directory. Dovrebbe venire con le versioni recenti di GNU emacs e verrà usato di default quando visiti un file con estensione .zip. Da questa modalità è possibile estrarre singoli file in un buffer e da li salvarli con C-x C-s.