2012-04-19 21 views
11

Tengo algunos directorios con algunos archivosTar: Crear un archivo excluir directorios excepto uno

dir_archive/somedir1 
dir_archive/somedir2 
dir_archive/somedir3 
dir_archive/mydir 
dir_archive/mydir/excludedir1 
dir_archive/mydir/excludedir2 
dir_archive/mydir/excludedir3 
dir_archive/mydir/many_other_directories... 
dir_archive/mydir/my_archive_dir 

Quiero crear alquitrán (GZ) dir_archive.tar.gz archivo con todos los archivos y directorios excluyo

dir_archive/mydir/excludedir1 
dir_archive/mydir/excludedir2 
dir_archive/mydir/excludedir3 
dir_archive/mydir/many_other_directories... 

pero incluyen

dir_archive/mydir/my_archive_dir 

no quiero utilizar --exclude para cada directorio

tar cvfz dir_archive.tar.gz --exclude=dir_archive/mydir/excludedir1 --exclude=dir_archive/mydir/excludedir2 --exclude=dir_archive/mydir/excludedir3 

Trato uso --add-file, pero no funciona:

tar cvfz dir_archive.tar.gz --exclude=dir_archive/mydir --add-file=dir_archive/mydir/my_archive_dir dir_archive 

existe alguna forma sencilla? Gracias

Respuesta

20

Una forma sería la primera excluyendo el mydir y luego añadiendo el my_archive_dir

tar cvf dir_archive.tar --exclude=dir_archive/mydir dir_archive 
tar rvf dir_archive.tar dir_archive/mydir/my_archive_dir 
gzip dir_archive.tar 

Desafortunadamente anexar no funciona con archivos comprimidos.

La opción --exclude tiene un patrón como argumento, por lo que si los nombres de los directorios que deben excluirse son similares, se pueden evitar y aún incluir el directorio de archivo

tar cvfz dir_archive.tar.gz --exclude=dir_archive/mydir/exclude* dir_archive 

También es posible crear una archivo con los nombres de todos los archivos que desea incluir y dar esa lista a tar con la opción -T o --files-from (o de manera similar enumere los archivos que se excluirán y proporcione la lista con la opción -X).

 
filelist.txt: 
dir_archive 
dir_archive/temp1 
dir_archive/mydir 
dir_archive/mydir/temp2 
dir_archive/mydir/my_archive_dir 
dir_archive/mydir/my_archive_dir/temp7 
tar cvfz dir_archive.tar.gz --no-recursion --files-from filelist.txt 
+0

Gracias por las respuestas exhaustivas – kubedan

+1

cuidado, alquitrán pone implícitamente una '' * antes de cada línea de la entrada -X; dir_archive coincidirá con dir_archive/dir_archive, que * podría * ser un gran problema. – rcreswick

Cuestiones relacionadas