টার, জিজেড, জিপ বা বিজিপ 2 [বন্ধ] ব্যবহার করে ফাইলগুলি বিভক্ত করুন


144

আমার প্রায় 17-20 গিগাবাইটের একটি বৃহত ফাইল সঙ্কুচিত করতে হবে। আমার প্রতি ফাইলটি প্রায় 1GB এর কয়েকটি ফাইলে বিভক্ত করতে হবে।

আমি গুগলের মাধ্যমে একটি সমাধান অনুসন্ধান করেছি এবং ব্যবহার splitএবং catকমান্ডের উপায় খুঁজে পেয়েছি । তবে তারা বড় ফাইলগুলির জন্য মোটেও কাজ করেনি। এছাড়াও, তারা উইন্ডোজে কাজ করবে না; আমার এটি উইন্ডোজ মেশিনে বের করতে হবে।


3
আমি আপনার ব্যথা অনুভব করছি তবে এটি প্রোগ্রামিং সম্পর্কিত বলে মনে হচ্ছে না।
জেসন এস

1
অনেকগুলি সংক্ষেপণ প্রোগ্রাম (যেমন 7-জিপের মতো) সহজেই বিতরণের জন্য সংকোচিত ফাইলটিকে একটি নির্দিষ্ট আকারের ভলিউমে বিভক্ত করতে সক্ষম হয়।
মার্টিন লিভারেজ

এটি সুপারউজার ডটকমের সাথে সম্পর্কিত, তবে ব্যক্তিগত বিটা আগামীকাল অবধি শুরু হবে না, আমাকে বলা হয়েছে।
জেস্পের

আমি জিজ্ঞাসা করতে পারি যে আপনার ফাইলটি সংকুচিত করার প্রয়োজন কেন?
জানুয়ার জাঙ্গনিকেল

এখানে পোস্ট করা দুটি কার্যকর সমাধানগুলির মধ্যে একটি যদি প্যান না করে তবে তার জন্য একটি প্রোগ্রামিং সমাধানের প্রয়োজন হবে।
জোশুয়া

উত্তর:


253

আপনি বিকল্পটি splitসহ কমান্ডটি ব্যবহার করতে পারেন -b:

split -b 1024m file.tar.gz

@ জোশুয়ার উত্তরটি ব্যবহার করে এটি একটি উইন্ডোজ মেশিনে পুনরায় সংযুক্ত করা যেতে পারে ।

copy /b file1 + file2 + file3 + file4 filetogether

সম্পাদনা : @ চার্লি যেমন নীচের মন্তব্যে বলেছেন, আপনি সম্ভবত একটি উপসর্গ স্পষ্টভাবে সেট করতে চাইতে পারেন কারণ এটি xঅন্যথায় ব্যবহার করবে , যা বিভ্রান্তিকর হতে পারে।

split -b 1024m "file.tar.gz" "file.tar.gz.part-"

// Creates files: file.tar.gz.part-aa, file.tar.gz.part-ab, file.tar.gz.part-ac, ...

সম্পাদনা : পোস্টটি সম্পাদনা করা হচ্ছে কারণ প্রশ্নটি বন্ধ রয়েছে এবং সবচেয়ে কার্যকর সমাধানটি এই উত্তরের সামগ্রীর খুব কাছে রয়েছে:

# create archives
$ tar cz my_large_file_1 my_large_file_2 | split -b 1024MiB - myfiles_split.tgz_
# uncompress
$ cat myfiles_split.tgz_* | tar xz

এই দ্রবণটি (ডি) সংকুচিত করার সময় একটি মধ্যবর্তী বড় ফাইল ব্যবহার করার প্রয়োজনীয়তা এড়ায়। ফলাফল প্রাপ্ত ফাইলগুলির জন্য আলাদা ডিরেক্টরি ব্যবহার করতে টার-সি বিকল্পটি ব্যবহার করুন। বিটিডব্লু যদি সংরক্ষণাগারটি কেবল একটি একক ফাইল থেকে থাকে তবে টার এড়ানো যায় এবং কেবল জিজিপ ব্যবহার করা যায়:

# create archives
$ gzip -c my_large_file | split -b 1024MiB - myfile_split.gz_
# uncompress
$ cat myfile_split.gz_* | gunzip -c > my_large_file

উইন্ডোজের জন্য আপনি একই কমান্ডের পোর্টড সংস্করণগুলি ডাউনলোড করতে পারেন বা সাইগউইন ব্যবহার করতে পারেন।


7
যদি আপনি ফাইলের নাম পর গত আর্গুমেন্ট হিসাবে একটি উপসর্গ জুড়বেন না আপনি ফাইল আউটপুট নামে xaa, xab, xác, xad পেতে বিভক্ত করতে ....
চার্লি

@ চার্লি, ধন্যবাদ, আমি আমার উত্তর আপডেট করেছি।
ম্যাটপি

2
আসলে ব্যবহার করে -b 1024MiBএকটি ত্রুটি দিয়েছে যে এটি বাইটের একটি অবৈধ সংখ্যা। --bytes=1024mকাজ ব্যবহার করে।
ব্রায়ান

এবং আপনাকে catফাইলটি পুনরায় সাজানোর জন্য ব্যবহার করতে হবে না । আপনি copy /b file1 + file2 + etc..উইন্ডোজে ব্যবহার করতে পারেন , তারপরে লিনাক্সে আবার অনুলিপি করতে পারেন এবং টার পুনরায় সংশ্লেষিত টারবাল পড়তে পারেন। আমি এটি চেষ্টা করেছিলাম।
ব্রায়ান

1
বিভক্তটির বিকল্প রয়েছে --numeric-suffixes: বর্ণানুক্রমিক পরিবর্তে সংখ্যাসূচক প্রত্যয় ব্যবহার করুন।
ডাঃ জানু-ফিলিপ গেহর্কেকে

27

আপনি যদি লিনাক্স থেকে বিভক্ত হয়ে থাকেন তবে আপনি উইন্ডোতে পুনরায় সমাবেশ করতে পারবেন can

copy /b file1 + file2 + file3 + file4 filetogether

আপনিও ব্যবহার করতে পারেন copy /b file* filetogether- support.microsoft.com/kb/71161
eug

5
এটি কেবলমাত্র এনটিএফএসে সঠিকভাবে কাজ করে এবং যদি ফাইলগুলি এনটিএফএসের মধ্যে ইতিমধ্যে সাজানো থাকে। এটি FAT বা FAT32 = বুমে চেষ্টা করুন।
জোশুয়া

+1 নিশ্চিত করুন যে ফাইলগুলি সঠিক ক্রমে রয়েছে!
ব্রায়ান

@ জোশুয়া ন্যায্য হওয়ার জন্য, যদি তারা না হন তবে আপনি একটি খারাপ নামকরণ করেছেন।
jpmc26

@ jpmc26: আপনি FAT32 এর খারাপ ডিরেক্টরি পুনর্নির্দিষ্ট অভ্যাস সম্পর্কে জানেন?
জোশুয়া


8

পরীক্ষিত কোড, প্রাথমিকভাবে একটি একক সংরক্ষণাগার ফাইল তৈরি করে, তারপরে বিভক্ত করে তোলে:

 gzip -c file.orig > file.gz
 CHUNKSIZE=1073741824
 PARTCNT=$[$(stat -c%s file.gz) / $CHUNKSIZE]

 # the remainder is taken care of, for example for
 # 1 GiB + 1 bytes PARTCNT is 1 and seq 0 $PARTCNT covers
 # all of file
 for n in `seq 0 $PARTCNT`
 do
       dd if=file.gz of=part.$n bs=$CHUNKSIZE skip=$n count=1
 done

এই রূপটি একটি একক সংরক্ষণাগার ফাইল তৈরি করা বাদ দেয় এবং সরাসরি অংশগুলি তৈরি করতে যায়:

gzip -c file.orig |
    ( CHUNKSIZE=1073741824;
        i=0;
        while true; do
            i=$[i+1];
            head -c "$CHUNKSIZE" > "part.$i";
            [ "$CHUNKSIZE" -eq $(stat -c%s "part.$i") ] || break;
        done; )

এই রূপটিতে, সংরক্ষণাগারটির ফাইলের আকারটি যদি বিভাজ্য হয় $CHUNKSIZEতবে শেষ আংশিক ফাইলটিতে ফাইলের আকার 0 বাইট থাকবে।


1
splitইতিমধ্যে এটি কি ।
স্পষ্টভাবে

1
প্রকৃতপক্ষে আরে, আমি কেবল এটির জন্য কিছু পোস্ট খনন করেছি। নির্দিষ্ট ডিভাইসে আমার কোনও বিভাজন বা জিপ কমান্ড / বাইনারি নেই এবং এটি একদম সঠিকভাবে কাজ করেছে। আমি এই কোডটি স্প্লিট কমান্ড হিসাবে কাজ করতে প্রস্তুত করব :)। আপনাকে অনেক ধন্যবাদ @ অ্যাড্রিয়ান পানাসিউক। এটা আমার জন্য pefect।
এম

@ erm3nda আপনি স্বাগত, এটি সাহায্য করে খুশি!
অ্যাড্রিয়ান পানাসিয়ুক

তবে, আমি পরীক্ষা করেছি এবং ফলাফলটি একটি সম্পূর্ণ ফাইল, বিভক্ত নয়। এটা কিভাবে হতে পারে? একটি ছোট ডিভাইসে একটি বড় ফাইল ছিল, তাই দীর্ঘ প্রক্রিয়া ছিল। পোস্ট করার সময় দয়া করে আপনার সমাধানগুলি পরীক্ষা করুন :(
এম

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