2012-03-15 38 views
22

Tôi có một thư mục, ví dụ: /var/tmp/my-dir/ mà tôi thường xuyên nén bằng lệnh sau:Đổi tên tên thư mục Trước khi tar xảy ra

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

Sau đó, khi tôi tar my-dir.tar.gz, nó sẽ tạo my-dir/ trong thư mục hiện hành. Có vẻ như thư mục my-dir được "gói" bên trong tarball. Có tùy chọn tar để đổi tên my-dir thành ví dụ: your-dirtrước sự cố thực sự xảy ra. Vì vậy ...

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

Cảm ơn.

Trả lời

41

tar nào?

GNU Tar chấp nhận đối số --transform, mà bạn cung cấp biểu thức sed để thao tác tên tệp.

Ví dụ, để đổi tên trong giải nén:

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

BSD tar và S tar tương tự có một cuộc tranh cãi -s, tham gia một đơn giản /old/new/ (không phải là một biểu hiện sed chung).

+0

Wow, cảm ơn bạn rất nhiều! Điều này hoạt động như một sự quyến rũ (được chấp nhận, +1). – moey

+1

@ephemient, tôi phải sử dụng --transform = 'pattern', như: sudo tar -xjvf thunderbird-14.0.tar.bz2 --transform = 's/thunderbird \ (\/\)/thunderbird.14 \ 1/' với ln -sf thunderbird.14 thunderbird, cập nhật thunderbird sẽ không thành vấn đề! \ m/ –

+1

'--transform' được giới thiệu trong phiên bản 1.2, tiếc là RHEL và CentOS 5.10 chỉ đi kèm với tar v1.15 :( –

0

Đối với tác phẩm mac -s cờ.

Rename trên nén:

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

Rename trên chiết xuất:

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

Các vấn đề liên quan