Cách giải nén tar.gz trong thư mục khác


270

Tôi có một kho lưu trữ

* .tar.gz

Làm thế nào tôi có thể giải nén điều này trong một thư mục đích?


9
Tại sao tất cả các downvote? Có nhiều lựa chọn hơn chỉ -C (và có thể phiên bản của anh ấy không cung cấp điều này).
Alfe

2
Stack Overflow là một trang web cho các câu hỏi lập trình và phát triển. Câu hỏi này dường như lạc đề vì nó không liên quan đến lập trình hay phát triển. Xem những chủ đề nào tôi có thể hỏi về đây trong Trung tâm trợ giúp. Có lẽ Super User hoặc Unix & Linux Stack Exchange sẽ là một nơi tốt hơn để hỏi.
jww

@jww Trong khi tôi thấy quan điểm của bạn, chúng tôi cũng có các thẻ được đặt tên targzxung quanh trong diễn đàn này . Trích xuất một tarball vào một thư mục cụ thể cũng có thể là một phần của tập lệnh shell và do đó là một phần của lập trình. Tôi đoán loại câu hỏi này có thể được hỏi trong một trong hai diễn đàn.
Alfe

Câu trả lời:


319

Bạn có thể sử dụng tùy chọn -C(hoặc --directorynếu bạn thích các tùy chọn dài) để đưa ra thư mục đích bạn chọn trong trường hợp bạn đang sử dụng phiên bản Gnu của tar. Thư mục nên tồn tại:

mkdir foo
tar -xzf bar.tar.gz -C foo

Nếu bạn không sử dụng tarkhả năng trích xuất vào một thư mục cụ thể, bạn có thể chỉ cần cdvào thư mục đích trước khi gọi tar; sau đó, bạn sẽ phải đưa ra một đường dẫn đầy đủ đến kho lưu trữ của bạn, tất nhiên. Bạn có thể thực hiện việc này trong một phạm vi con phạm vi để tránh ảnh hưởng đến tập lệnh xung quanh:

mkdir foo
(cd foo; tar -xzf ../bar.tar.gz)  # instead of ../ you can use an absolute path as well

Hoặc, nếu không phải là đường dẫn tuyệt đối cũng không phải là đường dẫn tương đối đến tệp lưu trữ, bạn cũng có thể sử dụng đường dẫn này để đặt tên cho kho lưu trữ bên ngoài phạm vi con phạm vi:

TARGET_PATH=a/very/complex/path/which/might/even/be/absolute
mkdir -p "$TARGET_PATH"
(cd "$TARGET_PATH"; tar -xzf -) < bar.tar.gz

107
gzip -dc archive.tar.gz | tar -xf - -C /destination

hoặc, với GNU tar

tar xzf archive.tar.gz -C /destination

3
Tôi thích khái niệm sử dụng gziptrong trường hợp tar không hiểu tài liệu lưu trữ được nén.
Alfe

4

Trích xuất myArchive.tar đến / DestinationDirectory

Các lệnh:

cd /destinationDirectory
pax -rv -f myArchive.tar -s ',^/,,'

0

Bạn có thể sử dụng cho vòng lặp để tar nhiều file .tar.gz đến một thư mục khác. Đoạn mã sau sẽ lấy / Destination / thư mục / đường dẫn làm đối số cho tập lệnh và hủy bỏ tất cả các tệp .tar.gz có ở vị trí hiện tại trong / Destination / thư mục / đường dẫn.

if [ $# -ne 1 ];
 then
 echo "invalid argument/s"
 echo "Usage: ./script-file-name.sh /target/directory"
 exit 0
fi
for file in *.tar.gz
do
    tar -zxvf "$file" --directory $1
done
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.