Làm thế nào để xác định một tên khác cấp độ cao nhất trên đỉnh cao cho tar?


10

Tôi muốn tar gốc (/) và để nó xuất hiện dưới dạng / abc trong kho lưu trữ tar.

Có một cờ tar để chỉ định một tên cấp cao nhất tùy chỉnh?

Câu trả lời:


6

Gần nhất tôi có thể tìm thấy là --transformtùy chọn. Tôi không biết chắc chắn, nhưng tôi đoán đây là cờ chỉ GNU:

 --transform, --xform EXPRESSION
       use sed replace EXPRESSION to transform file names

Sử dụng điều đó, bạn có thể truyền sedlệnh thay thế và thay đổi /thành /abc:

tar cf root.tgz --transform 's/^\//\/abc/' /

Điều này vẫn sẽ in /đường dẫn khi tạo tệp lưu trữ nhưng chúng sẽ trở thành /abckhi bạn giải nén nó.


Một cách tiếp cận khác, nếu bạn tarkhông có --transformtùy chọn là tạo /abcmột liên kết tượng trưng trỏ đến /và sau đó tar:

$ ln -s / /abc
$ tar chf root.tgz /abc

Điều -hcần thiết là đó là những gì nói tartheo các liên kết:

 -h, --dereference
       follow symlinks; archive and dump the files they point to

Điều đó sẽ có tác dụng thiết lập /abcnhư thư mục cấp cao nhất.


2

Với GNU tar, bạn có thể sử dụng lệnh đó:

tar --transform="s|/|/abc/|" -Pcf bar.tar /

Mặt khác, đây là một cách di động để làm điều đó, tức là một cách không dựa vào GNU hoặc phần mở rộng tar cụ thể khác mà dựa trên công cụ POSIX có sẵn trên bất kỳ máy tương thích Unix nào:

pax -w -s '/\//\/abc\//' -f foo.tar /

1

Đây là cách tôi đã làm nó hoạt động cho tarring từ bất kỳ vị trí nào (không chỉ /):

tar --transform 's|^|/abc/|' -zcvf /path/to/dest.tgz *

Nó chỉ đơn giản là nối thêm /abc/vào đầu của mỗi con đường.


1
Khi giải nén một kho lưu trữ được tạo theo cách này, tôi nhận được một cảnh báo tar: Removing leading / from member names. Sử dụng 's|^|abc/|'làm việc tốt cho tôi.
Michael Platings
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.