hat ejemplos descomprimir comando bz2 linux shell archive tar

linux - ejemplos - descomprimir tar rar



Comando de shell al directorio tar, excluyendo ciertos archivos/carpetas (23)

¿Existe un comando / script de shell simple que permita excluir ciertos archivos / carpetas para que no se archiven?

Tengo un directorio que necesita archivarse con un subdirectorio que tiene una cantidad de archivos muy grandes que no necesito hacer una copia de seguridad.

No son soluciones del todo.

El comando tar --exclude=PATTERN coincide con el patrón dado y excluye esos archivos, pero necesito que se ignoren los archivos y carpetas específicos (ruta completa del archivo), de lo contrario se podrían excluir los archivos válidos.

También podría usar el comando buscar para crear una lista de archivos y excluir los que no quiero archivar y pasar la lista a tar, pero eso solo funciona con una pequeña cantidad de archivos. Tengo decenas de miles.

Estoy empezando a pensar que la única solución es crear un archivo con una lista de archivos / carpetas que se excluirán, luego usar rsync con --exclude-from=file para copiar todos los archivos a un directorio tmp, y luego usar tar para archivar ese directorio.

¿Alguien puede pensar en una solución mejor / más eficiente?

EDITAR: la solución de cma funciona bien. El gran problema es que la --exclude=''./folder'' DEBE estar al principio del comando tar. Comando completo (cd primero, entonces la copia de seguridad es relativa a ese directorio):

cd /folder_to_backup tar --exclude=''./folder'' --exclude=''./upload/folder2'' -zcvf /backup/filename.tgz .


Después de leer este hilo, hice una pequeña prueba en RHEL 5 y aquí están mis resultados para reforzar el directorio abc:

Esto excluirá los errores y registros de directorios y todos los archivos bajo los directorios:

tar cvpzf abc.tgz abc/ --exclude=''abc/error'' --exclude=''abc/logs''

Agregar un comodín después del directorio excluido excluirá los archivos pero conservará los directorios:

tar cvpzf abc.tgz abc/ --exclude=''abc/error/*'' --exclude=''abc/logs/*''


Echale un vistazo

tar cvpzf zip_folder.tgz . --exclude=./public --exclude=./tmp --exclude=./log --exclude=fileName


Encontré esto en otro lugar, así que no voy a tomar crédito, pero funcionó mejor que cualquiera de las soluciones anteriores para mis problemas específicos de mac (aunque esto está cerrado):

tar zc --exclude __MACOSX --exclude .DS_Store -f <archive> <source(s)>


Esto excluye patrones de mangos como nombre de archivo como png o mp3, así como nombres de directorio como .git y node_modules

tar --exclude={*.png,*.mp3,*.wav,.git,node_modules} -Jcf ${target_tarball} ${source_dirname}


Estoy de acuerdo en que la bandera --exclude es el enfoque correcto.

$ tar --exclude=''./folder_or_file'' --exclude=''file_pattern'' --exclude=''fileA''

Una advertencia para un efecto secundario que no encontré inmediatamente obvio: la exclusión de ''archivoA'' en este ejemplo buscará ''archivoA'' RECURSIVAMENTE!

Ejemplo: un directorio con un solo subdirectorio que contiene un archivo con el mismo nombre (data.txt)

data.txt config.txt --+dirA | data.txt | config.docx

  • Si se usa --exclude=''data.txt'' el archivo no contendrá ni el archivo data.txt. Esto puede provocar resultados inesperados si se archivan bibliotecas de terceros, como un directorio node_modules.

  • Para evitar este problema, asegúrese de proporcionar la ruta completa, como --exclude=''./dirA/data.txt''


La siguiente secuencia de comandos bash debería hacer el truco. Utiliza la respuesta dada here por Marcus Sundman.

#!/bin/bash echo -n "Please enter the name of the tar file you wish to create with out extension " read nam echo -n "Please enter the path to the directories to tar " read pathin echo tar -czvf $nam.tar.gz excludes=`find $pathin -iname "*.CC" -exec echo "--exclude /'{}/'" /;|xargs` echo $pathin echo tar -czvf $nam.tar.gz $excludes $pathin

Esto imprimirá el comando que necesita y puede copiarlo y pegarlo nuevamente. Probablemente haya una forma más elegante de proporcionarlo directamente a la línea de comandos.

Simplemente cambie * .CC por cualquier otra extensión común, nombre de archivo o expresión regular que desee excluir y esto aún debería funcionar.

EDITAR

Solo para añadir una pequeña explicación; find genera una lista de archivos que coinciden con la expresión regular elegida (en este caso * .CC). Esta lista se pasa a través de xargs al comando echo. Esto imprime --excluye ''una entrada de la lista''. Las barras () son caracteres de escape para las marcas ''.


Lo he experimentado, al menos con la versión Cygwin de tar que estoy usando ("CYGWIN_NT-5.1 1.7.17 (0.262 / 5/3) 2012-10-19 14:39 i686 Cygwin" en una edición de Windows XP Home Máquina SP3), el orden de las opciones es importante.

Si bien esta construcción funcionó para mí:

tar cfvz target.tgz --exclude=''<dir1>'' --exclude=''<dir2>'' target_dir

ese no funcionó

tar cfvz --exclude=''<dir1>'' --exclude=''<dir2>'' target.tgz target_dir

Esto, mientras que tar --help revela lo siguiente:

tar [OPTION...] [FILE]

Entonces, el segundo comando también debería funcionar, pero aparentemente no parece ser el caso ...

Mejores rgds,


No tuve la suerte de que tar excluyera un subdirectorio de 5 Gigabytes a unos pocos niveles de profundidad. Al final, acabo de usar el comando Zip de Unix. Funcionó mucho más fácil para mí.

Así que para este ejemplo particular de la publicación original
(tar --exclude = ''. / folder'' --exclude = ''. / upload / folder2'' -zcvf /backup/filename.tgz.)

El equivalente sería:

zip -r /backup/filename.zip. -x subir / carpeta / ** / * subir / carpeta2 / ** / *

(NOTA: Aquí está la publicación que usé originalmente que me ayudó a https://superuser.com/questions/312301/unix-zip-directory-but-excluded-specific-subdirectories-and-everything-within-t )


Para Mac OSX tuve que hacer

tar -zcv --exclude=''folder'' -f theOutputTarFile.tar folderToTar

Tenga en cuenta la -f después de --exclude=


Para aquellos que tienen problemas con él, algunas versiones de tar solo funcionarán correctamente sin el ''./'' en el valor de exclusión.

Tar --version

tar (GNU tar) 1.27.1

Sintaxis de comando que funciona:

tar -czvf ../allfiles-butsome.tar.gz * --exclude=acme/foo

Estos no funcionarán:

$ tar -czvf ../allfiles-butsome.tar.gz * --exclude=./acme/foo $ tar -czvf ../allfiles-butsome.tar.gz * --exclude=''./acme/foo'' $ tar --exclude=./acme/foo -czvf ../allfiles-butsome.tar.gz * $ tar --exclude=''./acme/foo'' -czvf ../allfiles-butsome.tar.gz * $ tar -czvf ../allfiles-butsome.tar.gz * --exclude=/full/path/acme/foo $ tar -czvf ../allfiles-butsome.tar.gz * --exclude=''/full/path/acme/foo'' $ tar --exclude=/full/path/acme/foo -czvf ../allfiles-butsome.tar.gz * $ tar --exclude=''/full/path/acme/foo'' -czvf ../allfiles-butsome.tar.gz *


Para evitar posibles errores ''xargs: Argument list too long'' debido al uso de find ... | xargs ... find ... | xargs ... al procesar decenas de miles de archivos, puede canalizar la salida de find directamente a tar utilizando find ... -print0 | tar --null ... find ... -print0 | tar --null ...

# archive a given directory, but exclude various files & directories # specified by their full file paths find "$(pwd -P)" -type d /( -path ''/path/to/dir1'' -or -path ''/path/to/dir2'' /) -prune / -or -not /( -path ''/path/to/file1'' -or -path ''/path/to/file2'' /) -print0 | gnutar --null --no-recursion -czf archive.tar.gz --files-from - #bsdtar --null -n -czf archive.tar.gz -T -


Posible respuesta redundante, pero como la encontré útil, aquí está:

Mientras que una raíz de FreeBSD (es decir, usando csh) quise copiar todo mi sistema de archivos raíz a / mnt pero sin / usr y (obviamente) / mnt. Esto es lo que funcionó (estoy en /):

tar --exclude ./usr --exclude ./mnt --create --file - . (cd /mnt && tar xvd -)

Todo lo que quiero decir es que fue necesario (al poner ./ ) especificar a los directorios excluidos en qué parte del directorio mayor se está copiando.

Mis € 0.02


Posibles opciones para excluir archivos / directorios de la copia de seguridad usando tar:

Excluir archivos utilizando múltiples patrones

tar -czf backup.tar.gz --exclude=PATTERN1 --exclude=PATTERN2 ... /path/to/backup

Excluir archivos utilizando un archivo de exclusión rellenado con una lista de patrones

tar -czf backup.tar.gz -X /path/to/exclude.txt /path/to/backup

Excluya los archivos que usan etiquetas colocando un archivo de etiqueta en cualquier directorio que deba omitirse

tar -czf backup.tar.gz --exclude-tag-all=exclude.tag /path/to/backup


Pregunta antigua con muchas respuestas, pero encontré que ninguna era lo suficientemente clara para mí, así que me gustaría agregar mi intento.

si tienes la siguiente estructura

/home/ftp/mysite/

con los siguientes archivos / carpetas

/home/ftp/mysite/file1 /home/ftp/mysite/file2 /home/ftp/mysite/file3 /home/ftp/mysite/folder1 /home/ftp/mysite/folder2 /home/ftp/mysite/folder3

Por lo tanto, usted desea crear un archivo tar que contenga todo dentro de / home / ftp / mysite (para mover el sitio a un nuevo servidor), pero el file3 es solo basura, y todo en la folder3 tampoco es necesario, por lo que los folder3 dos.

usamos el formato

tar -czvf <name of tar file> <what to tar> <any excludes>

donde c = create, z = zip y v = verbose (puede ver los archivos a medida que se ingresan, lo que es útil para asegurarse de que no se agreguen ninguno de los archivos que excluya). y f = archivo.

entonces mi orden se vería así

cd /home/ftp/ tar -czvf mysite.tar.gz mysite --exclude=''file3'' --exclude=''folder3''

tenga en cuenta que los archivos / carpetas excluidos son relativos a la raíz de su archivo tar (he intentado la ruta completa aquí en relación con / pero no puedo hacer que funcione).

Espero que esto ayude a alguien (y la próxima vez que lo busque en Google)


Puede excluir directorios con --exclude para tar.

Si quieres archivar todo excepto /usr puedes usar:

tar -zcvf /all.tgz / --exclude=/usr

En tu caso quizás algo como

tar -zcvf archive.tgz arc_dir --exclude=dir/ignore_this_dir


Puede tener múltiples opciones de exclusión para tar así que

$ tar --exclude=''./folder'' --exclude=''./upload/folder2'' -zcvf /backup/filename.tgz .

etc funcionará. Asegúrese de poner --exclude antes de los elementos de origen y destino.


Puede utilizar la "notación ant" estándar para excluir directorios relativos.
Esto funciona para mí y excluye cualquier directorio .git o node_module.

tar -cvf myFile.tar --exclude=**/.git/* --exclude=**/node_modules/* -T /data/txt/myInputFile.txt 2> /data/txt/myTarLogFile.txt

myInputFile.txt contiene:

/ dev2 / java
/ dev2 / javascript


Puedes usar cpio (1) para crear archivos tar. cpio lleva los archivos para archivar en la entrada estándar, por lo que si ya ha descubierto el comando de búsqueda que desea usar para seleccionar los archivos del archivo, colóquelo en cpio para crear el archivo tar:

find ... | cpio -o -H ustar | gzip -c > archive.tar.gz


Su mejor apuesta es usar find con tar, a través de xargs (para manejar la gran cantidad de argumentos). Por ejemplo:

find / -print0 | xargs -0 tar cjf tarfile.tar.bz2


También puede usar una de las opciones de "--exclude-tag" según sus necesidades:

  • --exclude-tag = ARCHIVO
  • --exclude-tag-all = ARCHIVO
  • --exclude-tag-under = ARCHIVO

La carpeta que alberga el archivo especificado será excluida.


Use el comando de búsqueda junto con la opción tar append (-r). De esta manera, puede agregar archivos a un tar existente en un solo paso, en lugar de una solución de dos pasos (crear una lista de archivos, crear un tar).

find /dir/dir -prune ... -o etc etc.... -exec tar rvf ~/tarfile.tar {} /;


gnu tar v 1.26 el --exclude debe venir después de los argumentos del directorio y del archivo de copia de seguridad, no debe tener barras diagonales iniciales ni finales, y prefiere sin comillas (simple o doble). Entonces, en relación con el directorio de PADRES del que se realizará una copia de seguridad, es:

tar cvfz /path_to/mytar.tgz ./dir_to_backup --exclude=some_path/to_exclude


tar -cvzf destination_folder source_folder -X /home/folder/excludes.txt

-X indica un archivo que contiene una lista de nombres de archivos que deben excluirse de la copia de seguridad. Para Instancia, puede especificar * ~ en este archivo para no incluir ningún nombre de archivo que termine con ~ en la copia de seguridad.