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 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ữ?
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 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ữ?
Câu trả lời:
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ữ.
tar xzvf archive.tar.gz && mv archive/* /output
so với unzip archive.zip -d /output
)
Dấu chấm xuất hiện vì tar
tạ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 ./
*
cầu sẽ không khớp với các tập tin ẩn.
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 đủ.