Câu trả lời:
Gần nhất tôi có thể tìm thấy là --transform
tù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 sed
lệ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 /abc
khi bạn giải nén nó.
Một cách tiếp cận khác, nếu bạn tar
không có --transform
tùy chọn là tạo /abc
một liên kết tượng trưng trỏ đến /
và sau đó tar:
$ ln -s / /abc
$ tar chf root.tgz /abc
Điều -h
cần thiết là đó là những gì nói tar
theo 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 /abc
như thư mục cấp cao nhất.
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 /
Đâ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.
tar: Removing leading / from member names
. Sử dụng's|^|abc/|'
làm việc tốt cho tôi.