Làm cách nào để trích xuất một thư mục cụ thể từ tarball? và tước một thư mục hàng đầu?


12

Tôi muốn trích xuất một thư mục cụ thể từ tarpress wordpress. đặc biệt wp-includesđể .. Có vẻ như cấu trúc thư mục bên trong tarball là wordpress/wp-includesnhưng tôi chỉ cần ./wp-includesmột khi nó được giải nén , không có thư mục wordpress hàng đầu. Làm thế nào tôi sẽ làm điều này?

Câu trả lời:


13

Để trích xuất một thư mục cụ thể (và nội dung của nó, theo cách đệ quy), chỉ cần chuyển nó dưới dạng một đối số phụ trên dòng lệnh. Với GNU tar , bạn có thể loại bỏ một thư mục hàng đầu với --strip-componentstùy chọn (và thường biến đổi tên tệp bằng --transform). Trên các hệ thống không phải là Linux, bạn có thể sử dụng pax (trong POSIX, nhưng một số bản phân phối Linux bỏ qua phần cài đặt mặc định của chúng) và -stùy chọn của nó .

tar xf foo.tar --strip-components=1 wordpress/wp-includes  #GNU tar
pax -r <foo.tar -pp -s '!^wordpress/!!' wordpress/wp-includes

Bạn có thể hợp nhất danh sách bao gồm các quy tắc viết lại bằng cách nối thêm quy tắc để viết lại mọi thứ vào tên trống (có nghĩa là không được trích xuất ra; quy tắc chỉ áp dụng nếu các quy tắc trước đó không khớp).

pax -r <foo.tar -pp -s '!^wordpress/\(wp-includes/\)!\1!' -s !.*!!

5

Giả sử bạn có GNU tar, bạn có thể sử dụng --strip-components:

$ tar xaf tarball.tar.gz --strip=1 wordpress/wp-includes

Tôi tin rằng các phiên bản hiện tại của BSD tar cũng hỗ trợ --strip-components. Trong trường hợp xấu nhất, bạn có thể làm:

$ tar xzf tarball.tar.gz wordpress/wp-includes
$ mv wordpress/wp-includes .
$ rmdir wordpress

Tôi đã kết thúc việc làm sau chỉ vì vội vàng, nhưng thật tốt khi biết cái trước tồn tại.
xenoterracide

Có thể sử dụng một lệnh không yêu cầu đặt tên rõ ràng cho thành phần bị tước (ví dụ wordpress) không? Tôi cần điều này khi tôi trích xuất GitHub đã tạo ra các tarball chứa bản sửa đổi git trong thành phần bị tước mà tôi không biết trước.
tjanez
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.