Tidak terlalu sulit untuk menulis sesuatu untuk melakukan pekerjaan itu. Berikut ini contoh skrip Perl (memerlukan modul Archive :: Libarchive :: XS ).
#!/usr/bin/perl
use strict;
use warnings;
use Archive::Libarchive::XS qw(:all);
die "Usage: $0 in.7z out.tar" unless @ARGV == 2;
my ($infile, $outfile) = @ARGV;
my $in = archive_read_new();
archive_read_support_filter_none($in);
archive_read_support_format_7zip($in);
archive_read_open_filename($in, $infile, 10240) == ARCHIVE_OK
or die "Error opening $infile: ", archive_error_string($in);
my $out = archive_write_new();
archive_write_set_format_ustar($out);
archive_write_open_filename($out, $outfile) == ARCHIVE_OK
or die "Error opening $outfile: ", archive_error_string($out);
while (archive_read_next_header($in, my $entry) == ARCHIVE_OK) {
archive_write_header($out, $entry) == ARCHIVE_OK
or die archive_error_string($out);
while (1) {
my $size = archive_read_data($in, my $buff, 65536);
die archive_error_string($in) if $size < 0;
last if $size == 0;
archive_write_data($out, $buff) >= 0
or die archive_error_string($out);
}
}
archive_read_free($in);
archive_write_close($out);
archive_write_free($out);
Jika Anda menginginkan arsip tar.gz / tar.bz2 / tar.xz, tambahkan baris archive_write_add_filter_gzip($out);
atau archive_write_add_filter_bzip2($out);
atau archive_tar_add_filter_xz($out);
setelah archive_write_set_format
baris.
Ini tidak menggunakan ruang disk sementara (hanya ruang untuk file tar output) dan RAM sangat sedikit (hanya beberapa MB untuk perl, tetapi ia bekerja dengan file satu blok pada suatu waktu, jadi itu tidak masalah jika file Anda lebih besar dari RAM Anda).
.7z
file di komputer lain?