Tạo một kho lưu trữ tar của thư mục hiện tại mà không có giai đoạn trước


10

Khi tôi làm như sau:

tar czvf ../myarchive.tar.gz ./

Tôi nhận được một thư mục gốc (gây phiền nhiễu) trong kho lưu trữ tar của mình:

làm phiền

Làm cách nào để xóa khoảng thời gian khủng khiếp này khi tạo tệp lưu trữ?



3
Hoặc sử dụng --transform/ --xform, như được đề xuất bởi Magnus :tar -cf /path/to/output.tar -C /path/to/input-directory . --xform='s!^\./!!'
n.st

Câu trả lời:


6

Bạn không.

name=${PWD##*/}
cd ..
tar czf "$name.tar.gz" "$name"

(Lưu ý: điều này không hoạt động nếu shell của bạn có bật theo dõi liên kết tượng trưng thư mục hiện tại và thư mục hiện tại được truy cập thông qua một liên kết tượng trưng.)

Vâng, đây không phải là những gì bạn yêu cầu, nhưng đây là những gì bạn nên làm. Lưu trữ mở rộng rất nhiều tệp trong thư mục hiện tại gây khó chịu: nó đặt gánh nặng tạo thư mục đích cho tệp trên mỗi người giải nén tệp lưu trữ và nếu họ vô tình giải nén chúng trong thư mục không trống, thật khó để dọn dẹp. Hầu hết thời gian, một kho lưu trữ nên tạo một thư mục toplevel duy nhất có tên là tên cơ sở của kho lưu trữ.


Hiểu. Nếu tôi nhớ lại một cách chính xác, thật khó chịu khi phải thực hiện thêm một bước để hủy lưu trữ vào một thư mục cụ thể (ví dụ tar xzvf archive.tar.gz && mv archive/* /outputso với unzip archive.zip -d /output)
Naftuli Kay

9

Dấu chấm xuất hiện vì tartạo cấu trúc đường dẫn theo cách bạn đưa ra trong các đối số. Vì vậy, như bạn đã đưa ra . là nguồn, kho lưu trữ cũng được tạo ra trong cùng một cấu trúc.

Bạn có thể thử điều này và kiểm tra:

tar -czvf ../myarchive.tar.gz *

Cập nhật câu trả lời với sự giúp đỡ từ bình luận của n.st

tar --xform s:'./':: -czvf ../myarchive.tar.gz ./

1
Toàn *cầu sẽ không khớp với các tập tin ẩn.
n.st

: D eh..chỉ một người mới bắt đầu..didnt nhận ra.
beginer

Bạn có thể sử dụng thêm một số thông tin bash để bao gồm các tệp ẩn - hãy xem qua đây .
n.st

0

tốt hơn thêm ^ trước khi trước.

tar --xform s:'^./':: -czvf ../myarchive.tar.gz ./

HOẶC, tất cả "/" trong tên đường dẫn đầy đủ bên trong kho lưu trữ sẽ bị xóa trừ khi "/" là kết thúc của tên đường dẫn đầy đủ.


1
Vui lòng đề xuất chỉnh sửa cho câu trả lời đó thay vì đăng một câu trả lời riêng: unix.stackexchange.com/posts/144094/edit
muru
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.