Tạo một kho lưu trữ tar mà không bao gồm thư mục mẹ khi các tệp được lưu trữ trong các thư mục khác nhau


11

Tôi có bốn tệp sau trong hệ thống tệp:

/home/martin/cvs/ops/cisco/b/s1
/home/martin/cvs/ops/cisco/b/s2
/home/martin/cvs/ops/extreme/b/r3
/home/martin/cvs/ops/j/b/r5

Tôi cần đặt các tệp đó vào một kho lưu trữ tar, nhưng tôi không muốn thêm các thư mục. Điều tốt nhất tôi có thể nghĩ ra là:

tar -C ~/cvs/ops/ -czvf archive.tgz cisco/b/s1 cisco/b/s2 extreme/b/r3 j/b/r5

Điều này vẫn chưa hoàn hảo, bởi vì mỗi tệp trong kho lưu trữ là hai thư mục sâu. Có cách nào tốt hơn? Hay tôi chỉ đơn giản phải sao chép s1, s2, r3r5tập tin vào một thư mục và tạo ra các kho lưu trữ với tar -czvf archive.tgz s1 s2 r3 r5?

Câu trả lời:


17

Bạn có thể sử dụng -Cnhiều lần (chuyển từ thư mục này sang thư mục khác):

tar czvf archive.tar.gz -C /home/martin/cvs/ops/cisco/b s1 s2 -C ../../extreme/b r3 -C ../../j/b r5

Lưu ý rằng mỗi -Ctùy chọn được diễn giải liên quan đến thư mục hiện tại tại thời điểm đó (hoặc bạn chỉ có thể sử dụng các đường dẫn tuyệt đối).


11

Nếu bạn có danh sách các tệp trong một tệp hoặc có thể tạo chúng bằng lệnh, bạn có thể sử dụng một lệnh GNU tar duy nhất:

tar cf foo.tar -T list-of-files --transform 's:.*/::'

Biến đổi vẫn giữ các thư mục, nhưng làm phẳng bố cục hoàn toàn. Vì vậy, bạn cần một số cách lọc thư mục, do đó cần một danh sách các tập tin.


8

Bạn có thể nối các tệp vào kho lưu trữ từng cái một:

tar cf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s1
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/cisco/b s2
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/extreme/b r3
tar rf /tmp/archive.tar -C /home/martin/cvs/ops/j/b r5

Bạn có thể viết kịch bản này để làm cho nó dễ dàng hơn: đối với mỗi đường dẫn, hãy chạy tar rfvới thư mục cơ sở làm giá trị cho -Ctham số và tên tệp cơ sở mà không cần đường dẫn để thêm.

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.