Câu hỏi Làm thế nào để trích xuất các tập tin vào thư mục khác bằng lệnh 'tar'?


tôi đã nghĩ tar archive.tar /users/mylocation sẽ hoạt động, nhưng không. Làm thế nào tôi có thể làm điều đó?


582
2018-05-26 16:01


gốc


Cũng thế, -C, --directory DIR\n change to directory DIR thay vì được mô tả là change output directory to DIR (will fail if DIR doesn't exist). Cảm ơn @Mich. Xem thêm câu trả lời của @ Bryan_Larsen. - valid
@ Ujjwal Sing: Thật vậy, trang người đàn ông tar không phải là hữu ích. Nó mô tả "-C DIR" là "thay đổi thành thư mục DIR". Thậm chí tệ hơn: "tar -C mydir xf archive.tar" không hoạt động, trong khi "tar xf archive.tar -C mydir" thì không. - Pat Morin


Các câu trả lời:


Để trích xuất một tệp lưu trữ vào một thư mục khác với thư mục hiện tại, hãy sử dụng -C, hoặc là --directory, tùy chọn tar, như trong

tar -xf archive.tar -C /target/directory

Lưu ý rằng thư mục đích phải tồn tại trước khi chạy lệnh đó (nó có thể được tạo bởi mkdir /target/directory).

Đọc trang thủ công (chỉ huy: man tar) cho các tùy chọn khác.


842
2018-05-26 16:16



Tuy nhiên, bạn phải tạo thư mục theo cách thủ công. - Jürgen Paul
Đường dẫn có thể bị tước đi hay không: tức là chỉ truy xuất tệp - zzapper
Nếu đó là một tệp lớn hơn, khi bạn chạy lệnh, tất cả những gì bạn nhận được sẽ không có đầu ra trong vài giây hoặc thậm chí vài phút trong khi nó hoạt động. Bạn có thể sửa lỗi này bằng cách thêm -v cờ (chế độ tiết) liệt kê tên của từng tệp khi nó trích xuất nó. - IQAndreas
@consultstan xkcd.com/1168 - Duncan X Simpson
Không phải là nó tuyệt vời mà, sau tất cả những năm này, với tất cả các tùy chọn tar đã tích lũy, vẫn không có tùy chọn tạo thư mục đầu ra nếu nó không tồn tại? - EM0


Lưu ý rằng nếu tarball của bạn đã chứa tên thư mục bạn muốn thay đổi, hãy thêm --strip-components=1 Tùy chọn:

tar xf archive.tar -C /target/directory --strip-components=1

217
2018-05-21 18:32



Cảm ơn bạn. Tải xuống qua wget / etc luôn có thư mục 'cha'. Đây là câu trả lời hoàn chỉnh imo - hoặc cần được lưu ý trong câu trả lời ở trên. - bshea


Kết hợp các câu trả lời và nhận xét trước đó:

Chỉ cần trích xuất nội dung và tạo thư mục đích nếu thiếu:

mkdir -p /target/directory && tar xf archive.tar -C /target/directory

Để trích xuất và cũng loại bỏ thư mục gốc (cấp độ đầu tiên) trong zip

mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1

21
2018-06-27 19:29





Một tùy chọn khác là sử dụng --one-top-level. Thao tác này sẽ tự động tạo thư mục dựa trên tên tệp của tài liệu gốc.

tar zxvf filename.tgz --one-top-level

Ngoài ra nếu bạn muốn, bạn có thể chỉ định của riêng bạn và tar sẽ tạo ra nó tự động.

tar zxvf filename.tgz --one-top-level=new_directory

7
2018-03-22 21:49





Với tar 1.29, chúng ta chỉ có thể thêm tên thư mục sau tên tập tin tar. Ví dụ,

tar zxvf tar-file directory-name/

2
2018-06-29 23:00





Những gì tôi thấy thú vị liên quan đến khai thác là, nó phụ thuộc vào cách bạn tạo kho lưu trữ, xem ví dụ này

cd /tmp
mkdir folder
touch folder/file.txt

khi bạn làm tar -zcvf folder.tar.gz folder tất cả mọi thứ như mong đợi = khi bạn untar nó bây giờ nó sẽ được untarred (thư mục sẽ được tạo ra, nếu bạn gỡ bỏ nó) như /tmp/folder/.

Nhưng, khi bạn sẽ tạo tar tar -zcvf tmp-folder.tar.gz /tmp/folder và bạn bỏ nó vào thư mục / tmp, kết quả sẽ là /tmp/tmp/folder danh mục ! Trong trường hợp này, bạn phải bỏ nó đến / - tar -xf tmp-folder.tar.gz -C /


1
2017-09-01 22:25