giải nén 'tar' nhưng thay đổi tên thư mục để giải nén thành


26
tar -tf filename.tar
folder1/file
folder1/name
[...]

Tôi muốn giải nén tập tintên vào, thư mục2 . Điều này có thể được thực hiện như là một lót?

Câu trả lời:


35

Sử dụng -C--strip-components(Xem man tar).

Thí dụ:

mkdir FOLDER
# for remote tar file
curl -L ’remote_tar_file' | tar -xz - -C FOLDER --strip-components=1

# for local tar file
tar -xzf FILENAME -C FOLDER --strip-components=1

Giải trình:

Các -Clá cờ giả định một thư mục đã được tại chỗ nên nội dung của file tar có thể được mở rộng sang nó. do đó mkdir FOLDER.

Các --strip-componentscờ được sử dụng khi một tập tin tar tự nhiên sẽ mở rộng chính nó vào một thư mục, chúng ta hãy nói, như github nơi nó ví dụ để repo-name-masterthư mục. Tất nhiên, bạn sẽ không cần thư mục cấp đầu tiên được tạo ở đây để --strip-componentsđược đặt thành 1sẽ tự động xóa thư mục đầu tiên đó cho bạn. Số càng lớn được đặt các thư mục lồng nhau càng sâu được loại bỏ.


Tôi đọc man tar. Không phát hiện ra --strip-components. một người đẹp
Felipe Alvarez

1
tar-1.14 sử dụng --strip-path, tar-1.14.90 + sử dụng --strip-thành phần. Có lẽ vấn đề ở đây?
Mikhail Moskalev

Tôi sẽ nêu ra điều này nếu nó đưa ra một ví dụ và không chỉ các công tắc, như các trạng thái thủ công trực tuyến , 3 kiểu đối số làm phát sinh sự nhầm lẫn.
Iain

Quên -f trên tar -xz, tôi nghĩ vậy. Thất bại cho tôi. Tôi nghĩ rằng tôi đã sử dụng nó mà không có lý do tất cả thời gian này ...
John Carrell

17

Bạn cũng có thể sử dụng --transformtùy chọn để linh hoạt hơn một chút. Nó chấp nhận bất kỳ hoạt động thay thế sed (s).

Ví dụ, đây là cách tôi trích xuất một tarball Linux sang một thư mục mới để tôi có thể áp dụng một bản vá:

tar -xjf linux-2.6.38.tar.bz2 --transform 's/linux-2.6.38/linux-2.6.38.1/'
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.