bunzip2 vào một thư mục khác


8

Nói rằng tôi có một tập tin foo.tbz2trong một thư mục. Tôi muốn trích xuất tartập tin từ kho lưu trữ, nhưng đến một thư mục khác. Có vẻ như bunzip2sẽ chỉ trích xuất kho lưu trữ vào cùng thư mục với kho lưu trữ. Tui bỏ lỡ điều gì vậy?

Điều này hoạt động, nhưng tôi tự hỏi nếu có một cách tốt hơn:

cd /another/directory
bunzip2 -k -c /original/directory/foo.tbz2

Tôi nghĩ rằng cdphương pháp và trích xuất là phương pháp dự định. Điều gì là sai với nó?
jw013

@ jw013 Không có gì sai với nó, chỉ tò mò về các lựa chọn thay thế có thể.
longneck

@longneck hoàn toàn không hoạt động - nó trích xuất ra thiết bị xuất chuẩn, không phải là tệp trong thư mục /
other

Câu trả lời:


15

Bạn có thể sử dụng các công cụ bzip2 khác:

bzcat foo.tbz2 > /another/directory/foo.tar

bzip2 -ckd foo.tbz2 > /another/directory/foo.tar

Lưu ý rằng nếu bạn muốn gỡ bỏ nó sang thư mục khác, bạn có thể sử dụng tùy chọn -C để tar:

tar xjf foo.tbz2 -C /another/directory

1
+1 để truyền bá từ trên -Ccờ tar . Nó thực sự tiện dụng, nhưng hầu như không ai biết điều đó.
djf

1
Tôi đặc biệt không muốn trích xuất kho lưu trữ tar, nhưng bzcat trông giống hệt như những gì tôi đang tìm kiếm. Cảm ơn!
longneck

0

Tôi có đề nghị: Nếu bạn có một *bz2 file liệu *.tar.bz2hoặc *.bz2 không sử dụng bunzipchỉ sử dụng tar command, Bởi vì lệnh tar có nhiều tính năng có thể giúp bạn.

tar -jxf *.tar.bz2 -C yourplace/
or 
tar -jf *.bz2 -C yourplace/

Tôi không muốn tập tin tar được giải nén. Kết quả cuối cùng của bất kỳ lệnh nào tôi sử dụng cần phải là tệp tar trong một thư mục khác với tệp bz2 và tệp bz2 gốc không được xóa hoặc sửa đổi.
longneck

các lệnh trên không sửa đổi các tệp gốc, lưu ý: tệp tar hoạt động từng thuật toán, chẳng hạn như * gz * tar * lm * 7, v.v.
Tiếng Ba Tư

0

Phiên bản từ các tập lệnh trước (không có ghi đĩa kép - giữ tệp không giải nén trong bộ nhớ - trong trường hợp tệp lớn và đĩa chậm, điều này tạo ra sự khác biệt lớn về tốc độ):

#!/bin/sh

maxsize=2G
mkdir tmpfs 2>/dev/null
mount -t tmpfs -o size=${maxsize} tmpfs tmpfs

for i in $(ls -rS *.gz | sed 's/\.gz//');
do
     nice -n 19 gunzip -c ${i}.gz > tmpfs/${i}
     nice -n 19 bzip2 -c tmpfs/${i} > ${i}.bz2
     rm -f tmpfs/${i}
     if test -s "${i}.bz2"
     then
            rm -f "${i}.gz"
     fi
done
umount tmpfs

Làm thế nào là liên quan đến câu hỏi?
Dani_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.