2012-03-15 12 views
22

Ho una directory, ad es. /var/tmp/my-dir/ che ho spesso comprimere con il seguente comando:Rinominare il nome della directory prima del tar Happens

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

Più tardi, quando ho Untar my-dir.tar.gz, si creerà my-dir/ nella directory corrente. Sembra che la directory my-dir sia "avvolta" all'interno del tarball. Esiste un'opzione tar per rinominare my-dir ad es. your-dirprima dello si verifica la taratura effettiva. In modo che ...

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

Grazie.

risposta

41

Quale tar?

GNU Tar accetta un argomento --transform, a cui si fornisce un'espressione sed per manipolare i nomi di file.

Ad esempio, per rinominare durante il disimballaggio:

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

BSD catrame e S tar simile hanno un argomento -s, prendendo un semplice /old/new/ (non un generale sed espressione).

+0

Wow, grazie mille! Funziona come un fascino (accettato, +1). – moey

+1

@ephemient, ho dovuto usare --transform = 'pattern', come: sudo tar -xjvf thunderbird-14.0.tar.bz2 --transform = 's/thunderbird \ (\/\)/thunderbird.14 \ 1/' con ln -sf thunderbird.14 thunderbird, l'aggiornamento thunderbird non sarà un problema! \ m/ –

+1

'--transform' introdotto in 1.2, sfortunatamente RHEL e CentOS 5.10 vengono forniti solo con tar v1.15 :( –

0

Per mac funziona -s flag.

Rinomina compressa:

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

Rinomina estratto:

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

Problemi correlati