7z টর্কে সরাসরি টরে রূপান্তর করা সম্ভব?


10

আমার কাছে একটি .7z ফাইল রয়েছে যা একাধিক ডিরেক্টরিতে ~ 360,000 ইমেজ ধারণ করে। আমি এটি একটি ডেটরে রূপান্তর করতে চাই যাতে এটি অন্য কম্পিউটারে খুলতে পারি। এটিতে ফাইলগুলিতে এক্সট্র্যাক্ট করার এবং সেগুলি আবার সংকোচনের চেয়ে আরও ভাল উপায় কি আছে? সরাসরি রূপান্তর করা কি সম্ভব?


8
.7zঅন্য কম্পিউটারে ফাইলটি খুলতে বাধা দিচ্ছে কি ?
জর্ডান

7z ইনস্টল করার গন্তব্যে আমার প্রশাসকের অধিকার নেই। আমি জানি আমি উত্স থেকে ইনস্টল করতে পারি ইত্যাদি ...
মোহাম্মদ মোগিমি

উত্তর:


8

কাজটি করার জন্য কিছু লেখা খুব কঠিন নয়। এখানে পার্ল স্ক্রিপ্টের একটি উদাহরণ রয়েছে (মডিউলটি সংরক্ষণাগার প্রয়োজন :: লিবারচাইভ :: এক্সএস )।

#!/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);

আপনি যদি একটি tar.gz / tar.bz2 / লাইন tar.xz সংরক্ষণাগার, যোগ চেয়েছিলেন archive_write_add_filter_gzip($out);বা archive_write_add_filter_bzip2($out);বা archive_tar_add_filter_xz($out);পরে archive_write_set_formatলাইন।

এটি কোনও অস্থায়ী ডিস্ক স্পেস (আউটপুট টার ফাইলের জন্য কেবলমাত্র স্থান) এবং খুব সামান্য র‌্যাম (পার্লের জন্য মাত্র কয়েক মেগাবাইট) ব্যবহার করে না, তবে এটি ফাইলগুলির সাথে একসাথে একটি ব্লক কাজ করে, তাই আপনার ফাইলগুলি বড় হলে সমস্যা নেই not আপনার র‌্যামের চেয়ে)।


15

.7zসংরক্ষণাগারগুলি আর্কাইভগুলি প্রায়শই এক ধরণের অ্যালগরিদম দিয়ে সংকুচিত থাকে, যখন .tarসংরক্ষণাগারগুলি কেবল সংরক্ষণাগার হয়।

এগুলি তাদের স্কোপে পৃথক, এবং বেশিরভাগ ক্ষেত্রে কোনও রূপান্তরকরণের জন্য সর্বদা উত্স সংরক্ষণাগারটির নিষ্কাশন দ্বারা alচ্ছিক ডিকম্প্রেশন প্রয়োজন require এমনকি যদি কোনও .7zসংরক্ষণাগার কোনও সংকোচনের ব্যবহার না করে তবে এটি এখনও নিষ্কাশন প্রয়োজন require

বলা হচ্ছে, যদি আপনি একবারে উত্স সংরক্ষণাগারটি [সঙ্কুচিত] / এক্সট্র্যাক্ট / পুনরায় সংরক্ষণ করতে চেয়েছিলেন তবে উত্তরটি আপনি পারবেন না, কমপক্ষে উবুন্টুর ডিফল্ট সরঞ্জামগুলি ব্যবহার tarকরতে পারবেন নাstdin কারণ পড়তে পারেন না , তাই আপনি পাইপ করতে পারবেন না 7zএবং tar। যাইহোক, একক কমান্ডে সবকিছু স্বয়ংক্রিয়ভাবে চালানো খুব সহজ:

mkdir tmp && 7z x <path_to_source_archive> -otmp && tar cf archive.tar tmp && rm -rf tmp

* <path_to_archive> = উত্স .7zসংরক্ষণাগারটিতে পাথ

এছাড়াও সময় উৎস সংরক্ষণাগারের ফাইলের জন্য প্রয়োজনীয় নিষ্কাশিত ফাইল ডিস্কে এবং জন্য লেখা যেতে কে [ডিকম্প্রেস] করার জন্য পড়তে হবে / নির্যাস / rearchive দুই ধাপে সোর্স আর্কাইভ পুরো কাজের জন্য একটি বোতলের হয় বেশিরভাগই (altough না কেবলমাত্র) সম্ভাব্য ডিস্কের কম আই / ও গতির কারণে, সুতরাং সামগ্রিক বাধা অকার্যকর করার জন্য একটি অস্থায়ী ফাইলগুলি একটি র‌্যামডিস্কে সংরক্ষণ করা হবে:

  1. রামডিস্কের ফাইল সিস্টেমের জন্য মাউন্ট পয়েন্ট তৈরি করুন: sudo mkdir /mnt/tmpfs
  2. র‌্যামডিস্কের ফাইল সিস্টেমটি মাউন্ট করুন: sudo mount -t tmpfs -o size=<tmpfs_size> tmpfs /mnt/ramdisk* <tmpfs_size> = বাইট * 10 3 (1, 1 কে, 1 এম, 1 জি, ...) এ ফাইল সিস্টেমের আকার
  3. উত্স সংরক্ষণাগারটিতে * <path_to_archive> = পথ চালানmkdir /mnt/tmpfs/tmp && 7z x <path_to_source_archive> -o/mnt/tmpfs/tmp && tar cf archive.tar /mnt/tmpfs/tmp && rm -rf /mnt/tmpfs/tmp.7z
  4. রামডিস্কের ফাইল সিস্টেমটিকে আনমাউন্ট করুন: sudo umount
  5. রামডিস্কের ফাইল সিস্টেমের জন্য মাউন্ট পয়েন্টটি সরান: sudo rmdir /mnt/tmpfs

মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
মিচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.