2012-04-19 12 views
7

En dired+ en Emacs 23.2.1 en una variante Debian Squeeze, seleccioné cuatro archivos con * y luego pulsé Z para comprimirlos. Respondí y al aviso y vi algunas actualizaciones de estado en el mini-buffer. ¿Dónde encuentro el archivo comprimido? Probé en un archivo (C-uZ) y Emacs ejecutó gzip en un archivo y lo convirtió en un archivo .gz. ¿Cómo compruebo [tar y] los archivos marcados en Emacs?Cómo [tar y] comprimir archivos marcados en Emacs

(Para adelantarse a cualquier discusión filosófica o metodológica sobre tar, gzip, otros formatos y archivos en general, todo lo que quiero es que los cuatro archivos se almacenen en un archivo como datos comprimidos. Si eso se puede lograr a través de tar y gzip o compresión de cada uno directamente en un archivo no importa.)

Respuesta

17

Si dired+ es algo como dired, puede marcar los archivos con m y luego pulsa ! (para ejecutar un comando de shell en los archivos marcados) y especifique el comando como tar -czf foo.tar.gz * (el * es un marcador especial que se reemplaza por los nombres de los archivos marcados).

+0

Gracias, esto funciona en dired +. Había visto un ejemplo similar a esto, pero no me di cuenta de que * se reemplazaría con los nombres de/marked/files.Pensé que un comando común como este sería "incorporado" para dired [+]. – SabreWolfy

+0

'dired +' es solo un conjunto de extensiones a 'dired'. –

5

También puede archivar archivos simplemente marcándolos y copiándolos en un archivo.

Por ejemplo, marque varios archivos en la dirección y seleccione m-x dired-do-copy.

Cuando se le solicite el destino, escriba test.zip. Los archivos se agregarán al archivo zip automáticamente.

También puede descomprimir archivos seleccionándolos en Dired y ejecutar el comando dired-do-extract

Para hacer esto, mira las siguientes variables: dired-a-archivo-copy-a-lista dired-extracto-a-lista

Aquí está mi configuración, que me ha servido durante muchos años ...

;; dired-a provides support functions, including archiving, for dired 
(load "dired-a") 

;; Alist with information how to add files to an archive (from dired-a) 
;; Each element has the form (REGEXP ADD-CMD NEW-CMD). If REGEXP matches 
;; the file name of a target, that target is an archive and ADD-CMD is a command 
;; that adds to an existing archive and NEW-CMD is a command that makes a new 
;; archive (overwriting an old one if it exists). ADD-CMD and NEW-CMD are: 
;; 1. Nil (meaning we cannot do this for this type of archive) (one of 
;; ADD-CMD and NEW-CMD must be non-nil). 
;; 2. A symbol that must be a function e.g. dired-do-archive-op. 
;; 3. A format string with two arguments, the source files concatenated into 
;; a space separated string and the target archive. 
;; 4. A list of strings, the command and its flags, to which the target and 
;; the source-files are concatenated." 
(setq dired-to-archive-copy-alist 
     '(("\\.sh\\(ar\\|[0-9]\\)*$" nil "shar %s > %s") 
    ("\\.jar$" ("jar" "uvf") ("jar" "cvf")) 
    ("\\.tar$" ("tar" "-uf") ("tar" "-cf")) 
    ("\\.tgz$\\|\\.tar\\.g?[zZ]$" ("tar" "-uf %s" "|" "gzip > %s") ("tar" "-czvf")) 
    ("\\.ear$" ("zip" "-qr") ("zip" "-qr")) 
; ("\\.rar$" ("rar" "a") ("rar" "a")) 
    ("\\.war$" ("zip" "-qr") ("zip" "-qr")) 
    ("\\.zip$" ("zip" "-qr") ("zip" "-qr")) 
    ("\\.wmz$" ("zip" "-qr") ("zip" "-qr")) ;; for media player skins 
    ("\\.arc$" ("arc" "a") nil) 
    ("\\.zoo$" ("zoo" "aP") nil) 
    )) 

;; use pkzip with manipulating zip files (t) from within dired (use zip 
;; and unzip otherwise) 
(setq archive-zip-use-pkzip nil) 

;; add these file types to archive mode to allow viewing and changing 
;; their contents 
(add-to-list 'auto-mode-alist '("\\.[ejrw]ar$\\'" . archive-mode)) 

;; modify the dired-extract switches to use the directory 
;; ~/download/tryout as the default extract directory for zip files 
(defconst MY_TRYOUT_DIR "~/downloads/tryout" 
    "Directory for extracting files") 

(setq dired-extract-alist 
     `(
    ("\\.u\\(ue\\|aa\\)$" . dired-uud) 
    ("\\.jar$" . "jar -xvf %s") 
    ("\\.tar$" . ,(concat "tar -xf %s -C " MY_TRYOUT_DIR)) 
    ("\\.tgz$\\|\\.tar\\.g?[zZ]$" . ,(concat "tar -xzf %s -C " MY_TRYOUT_DIR)) 
    ("\\.arc$" . "arc x %s ") 
    ("\\.bz2$" . ,(concat "bunzip2 -q %s")) 
    ("\\.rar$" . ,(concat "unrar x %s " MY_TRYOUT_DIR "\\")) 
    ("\\.zip$" . ,(concat "unzip -qq -Ux %s -d " MY_TRYOUT_DIR)) 
    ("\\.ear$" . ,(concat "unzip -qq -Ux %s -d " MY_TRYOUT_DIR)) 
    ("\\.war$" . ,(concat "unzip -qq -Ux %s -d " MY_TRYOUT_DIR)) 
    ("\\.zoo$" . "zoo x. %s ") 
    ("\\.lzh$" . "lha x %s ") 
    ("\\.7z$" . "7z e %s ") 
    ("\\.g?[zZ]$" . "gzip -d %s") ; There is only one file 
    )) 
+0

cargando dired-a falla, y no parece ser un paquete que puedo encontrar en ningún lado –

+0

también parece que hacer una copia exacta no funciona como usted describe, creo que debe tener una extensión para habilitar esto, solo obtengo un error que el destino debe ser un directorio –

+0

Encontré 'dired-a' aquí: https://github.com/NikolausDemmel/emacs-pkgs/blob/master/misc/dired-a.el y también aquí: http: //groups.google.com/groups?selm=yzig226gpoz.fsf%40inge.nada.kth.se – legoscia

1

Plataforma: Ubuntu

Requisitos

Sistema:
sudo apt-get install atool

Emacs:
Mx paquete-list-paquetes
Cs-atool dired RET
i
x

Solución

1) Marque los archivos en el búfer directo.
2) M-x dired-atool-do-pack NOTA: Asegúrese de que shell-file-name esté establecido en "/ bin/bash".

Cuestiones relacionadas