2012-03-15 5 views
22

Tengo un directorio, p. /var/tmp/my-dir/ que con frecuencia puedo comprimir con el siguiente comando:Cambiar el nombre del directorio antes de que suceda el alquitrán

$ cd /var/tmp/ 
$ tar -zcf my-dir.tar.gz my-dir/* 

Más tarde, cuando untar mi-dir.tar.gz, que va a crear my-dir/ en el directorio actual. Parece que el directorio my-dir está "envuelto" dentro del tarball. ¿Existe una opción tar para cambiar el nombre my-dir a, p. your-dirantes de sucede el tarring real. Para que ...

$ tar -zxf my-dir.tar.gz 
# So that ... this creates your-dir/, instead of my-dir/ 

Gracias.

Respuesta

41

¿Cuál tar?

GNU Tar acepta un argumento --transform, al que le da una expresión sed para manipular los nombres de archivo.

Por ejemplo, para cambiar el nombre durante el desembalaje:

tar -zxf my-dir.tar.gz --transform s/my-dir/your-dir/ 

alquitrán BSD y S alquitrán de manera similar tienen un argumento -s, teniendo un simple /old/new/ (no un sed expresión general).

+0

Wow, muchas gracias! Esto funciona como un amuleto (aceptado, +1). – moey

+1

@ephemient, tuve que usar --transform = 'patrón', como: sudo tar -xjvf thunderbird-14.0.tar.bz2 --transform = 's/thunderbird \ (\/\)/thunderbird.14 \ 1/' con ln -sf thunderbird.14 thunderbird, ¡actualización Thunderbird no será un problema! \ m/ –

+1

'--transform' introducido en 1.2, lamentablemente RHEL y CentOS 5.10 solo vienen con tar v1.15 :( –

0

Para mac works -s marca.

Cambiar nombre en compresa:

tar -zcf my-dir.tar.gz -s /^my-dir/your-dir/ my-dir/*

Cambiar nombre en el extracto:

tar -zxf my-dir.tar.gz -s /^my-dir/your-dir/

Cuestiones relacionadas