Làm thế nào để tôi giải nén với tar vào một thư mục khác?


18

Điều này không hoạt động:

tar xf /tmp/foo.tar.gz foo/bar
tar: foo/bar: Not found in archive

Nó không rõ ràng đối với tôi những gì sẽ làm điều này ngoài việc giải nén nó tại chỗ và di chuyển các tập tin.

Câu trả lời:


28

Từ man tar:

     -C directory
         In c and r mode, this changes the directory before adding the
         following files.  In x mode, change directories after opening the
         archive but before extracting entries from the archive.

tức là tar xC /foo/bar -f /tmp/foo.tar.gznên làm công việc (trên FreeBSD, nhưng về cơ bản GNU tar về mặt này, hãy xem "Thay đổi thư mục làm việc" trong hướng dẫn sử dụng )


4
Tôi khuyên bạn nên kiểm tra hành vi này với các phiên bản tar không phải của GNU . Trang hướng dẫn Solaris chỉ đề cập đến tùy chọn này kết hợp các hoạt động thêmthay thế . Tò mò tôi đã thử nó với một hoạt động giải nén . Solaris' tar đã không phát hành bất kỳ lỗi hoặc cảnh báo và trích xuất các kho lưu trữ trong thư mục hiện hành =: - /
KTF

1
Cũng không hoạt động trên phiên bản AIX của tar: 'Tệp -C không có trong kho lưu trữ' - '-C' không hoạt động để tạo tarball.
DarkHeart

Có thể trao đổi thư mục chính với một tên mới?
tofutim

9

nếu bạn muốn trích xuất một kho lưu trữ tar ở nơi khác, chỉ cần cd vào thư mục đích và gỡ bỏ nó ở đó:

 mkdir -p foo/bar
 cd foo/bar
 tar xzvf /tmp/foo.tar.gz

Lệnh bạn đã sử dụng sẽ tìm kiếm tệp foo/bartrong kho lưu trữ và giải nén nó.


9

Đang làm:

(cd foo/bar ; tar xf /tmp/foo.tar.gz )

sẽ làm công việc

Về cơ bản, những gì đang làm là sinh ra một shell mới (dấu ngoặc đơn), trong phần con này, thay đổi thư mục thành foo/barvà sau đó gỡ bỏ tệp.

Bạn có thể thay đổi ;bởi a &&để chắc chắn cdhoạt động tốt.


1
Wow rằng bạn có thể bắt đầu một vỏ như thế là khá tuyệt! Tôi không có ý tưởng bạn có thể làm điều đó.
Kit Sunde

0
tar -xf ancd.tar.gz my/name/file

bạn có thể đặt tên tập tin với ./filesau tập tin tar.

tar -xf ancd.tar.gz ./my/name/file

nếu nó hoạt động có nghĩa là bạn đã tạo ra một tar với ./. sử dụng lệnh ít hơn để xem nội dung tar.

less ...tar.file  

0

Tôi gặp phải vấn đề tương tự và đã giải quyết nó.

Vấn đề là trong việc tạo tập tin chứ không phải tập tin đã tạo.

Khi cố gắng tar lên và chuyển một tập tin trong thư mục A, tôi đã cung cấp đường dẫn đến tập tin gốc trong lệnh tar

tar -cvf MyFile.tar /foo/bar/dir/not/needed/path/*

Những gì tôi đã có thể làm để giải quyết là

cd /foo/bar/dir/not/needed/
tar -cvf /tmp/MyFile.tar path*

Khi chuyển và trích xuất tarball, các thư mục con cần thiết được tạo.

tar -xvf MyFile.tar

0

Thay đổi thư mục mà bạn muốn giải nén

cd /u02/restore

nếu vị trí của tệp giải nén dưới /u01/backup.tar thì

Trích xuất như sau:

cd /u02/restore
tar -xvf /u01/backup.tar

0

Lệnh:

tar -xzvf foo.tar.gz -C /home/user/bar/

sẽ trích xuất tệp đầu vào "foo.tar.gz", vào thư mục /home/user/bar, trong khi in các tệp được xử lý.

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.