Domanda

Vorrei eseguire decomprimere (o anche zip) all'interno di un buffer diretto o simile. C'è qualcosa del genere? 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.

Grazie

È stato utile?

Soluzione

Hai opzioni ...

Per decomprimere un file .zip, è sufficiente 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à l'estensione .zip e decomprimerà un archivio .zip. Sono già supportati gunzip , bunzip2 , decompress e dictunzip .

Se si desidera contrassegnare i file e aggiungerli a un archivio .zip, è possibile utilizzare quanto segue per rendere z associato a comprimere il set di file contrassegnati:

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

Altri suggerimenti

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

! zip foo.zip * <RET>

Per estrarre un intero archivio da dired puoi contrassegnare un file ed eseguire & amp; decomprimi , proprio come faresti in una shell.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top