Đặt các tệp tar'd trong thư mục con


8

Tôi có một thiết lập thư mục như sau:

folder_x
file.y
file.z

Tôi muốn tạo một tệp tar để khi nó được giải nén, cấu trúc sẽ trông giống như thế này:

dir_q/folder_x
dir_q/file.y
dir_q/file.z

Làm thế nào tôi có thể làm cho điều này để làm việc bằng cách sử dụng tar? Để tham khảo, lệnh hiện tại mà tôi đang sử dụng là:

tar -czf archive.tar.gz file.y file.z folder_x

Câu trả lời:


9

Tôi chưa bao giờ sử dụng tùy chọn --transform, nhưng tôi tập hợp nó sẽ làm những gì bạn cần:

tar -czf archive.tar.gz --transform 's,^,dir_q/,' file.y file.z folder_x

Nhận ra việc sử dụng ,thay vì /làm dấu phân cách, vì vậy chúng ta có thể thêm dấu gạch chéo.


Hmm, có vẻ như nó không được thực hiện đúng cách: file.z-> dirfile.zdirfolder_x. Tôi cũng sẽ chơi xung quanh với regex xem tôi có thể làm theo cách tôi muốn không.

1
Đây là cách tôi thực hiện: tar -czf archive.tar.gz --transform 's, ^, dir_q /,' file.y file.z thư mục_x cho phép, thay vì /, tránh sự mơ hồ khi có dấu gạch chéo trong biểu thức của bạn . Thông thường tôi sẽ nói bạn có thể thoát khỏi dấu gạch chéo bằng dấu gạch chéo ngược, nhưng sed (ít nhất là gnu sed) không diễn giải chính xác.
jdb

tar --transform dường như không hoạt động trên MacOS
Alexander Mills

Trong MacOS, bạn có thể cài đặt macports và gnutar để có tùy chọn --transform. Hoặc tải về và biên dịch gnutar cho mình.
Marnix A. van Ammer

1

Nếu bạn không ngại tạo thư mục mới ...

mkdir dir_q; tar -C $ _ -xzvf archive.tar.gz

cách khác, tạo một thư mục mới, gỡ tệp vào thư mục đó, sau đó nhập lại từ thư mục mẹ để đưa tên của nó vào phiên bản giải nén. Bằng cách đó, bạn không phải nhớ một số lời mời siêu dài.

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.