কীভাবে সর্বাধিক সংকোচনের সাহায্যে টিআর এর সাথে একটি ডিরেক্টরি এক্সজেড করবেন?


116

সুতরাং আমি সর্বোচ্চ সংকোচনের সাথে একটি ডিরেক্টরি সংক্ষেপে প্রয়োজন।

আমি এটি দিয়ে কীভাবে পারি xz? আমার অর্থ আমার খুব প্রয়োজন tarকারণ আমি কেবল একটি ডিরেক্টরিকে সংকুচিত করতে পারি না xz। উদাহরণস্বরূপ, উত্পাদনের জন্য কোনও অন্নিলার রয়েছে foo.tar.xz?


11
FWIW, আরও তথ্যের জন্য আরটিএফএম man 1 xzবলেছে it's not a good idea to blindly use -9 for everything like it often is with gzip(1) and bzip2(1). -7 ... -9 [...] These are useful only when compressing files bigger than 8 MiB, 16 MiB, and 32 MiB, respectively.
সাইচোই

উত্তর:


82

xzকমান্ডলাইন পতাকাগুলির মানক সেটকে সম্মানিত করে ধরে নেওয়া - সংক্ষেপণ স্তরের পতাকা সহ, আপনি চেষ্টা করতে পারেন:

tar -cf - foo/ | xz -9 -c - > foo.tar.xz 

এবং এটি এক্সজেডের সাথে সর্বাধিক সংকোচনের স্তর ব্যবহার করে?
ল্যান্সবায়নেস

3
এক্সজেজেড -9 যুক্ত করা এটি সর্বোচ্চ করে তুলবে
বিএসডি

23
-9eসেরা স্তর, তবে এটি খুব দীর্ঘ সময় নেবে
Krzysztof Krasoń

-9eআপনাকে সর্বদা সেরা ফলাফল দেবে না - এখানে 8 নম্বর
rootusers.com/13-simple-xz-

1
এছাড়াও, আপনি উল্লেখযোগ্য উন্নতি দেখতে হতে পারে যদি আপনি যোগ --threads=0ভাবে XZ লস করার
KolonUK

146

tarব্যাশ বা উত্পন্ন শেলটিতে সাম্প্রতিক জিএনইউ সহ :

XZ_OPT=-9 tar cJf tarfile.tar.xz directory

তারার ছোট ছোট জে সুইচটি বিজিপ ব্যবহার করে, বড় হাতের জে সুইচ xz ব্যবহার করে।

XZ_OPTএনভায়রনমেন্ট ভেরিয়েবল সেট করতে দেয় xzঅপশন যেমন কলিং অ্যাপ্লিকেশন মাধ্যমে পাস করা যাবে না tar

এটি এখন সর্বাধিক

আপনি man xzসেট করতে পারেন এমন অন্যান্য বিকল্পগুলির জন্য দেখুন ( -e/ আপনাকে কিছু ডেটাসেটের জন্য কিছু অতিরিক্ত সংক্ষেপণ সুবিধা দিতে --extreme পারে )।

XZ_OPT=-e9 tar cJf tarfile.tar.xz directory

27
না, আপনি না। এটাই আসল ব্যাপার. আপনি কেবল সেই অনুরোধের জন্য পরিবেশ বৈচিত্র্য সেট করতে পারেন। আপনি চাইলে এটি রফতানি করতে পারেন, তবে আপনার দরকার নেই।
বিএসডি

2
আপনি এটির জন্য বাশ-জাতীয় শেল অনুমান করছেন।
এন্ডাম

7
@anddam, যে বোর্ন পরিবার (বোর্ন, ksh, mksh, pdksh, ছাই, ড্যাশ, ব্যাশ, যশ, zsh) এবং সব শাঁস দ্বারা সমর্থিত rcএবং akangafish, csh, tcshএবং esপ্রধান শাঁস এটি সমর্থন করে না হচ্ছে। সেখানে আপনি envকমান্ডটি ব্যবহার করবেন ।
স্টাফেন চেজেলাস

1
সুতরাং উভয় সেট করতে -9এবং -eভাবে XZ লস অনির্বাচন, যদি আপনি চান XZ_OPT=-e9কিন্তু @krzyk নির্দিষ্ট, -e হয় অত্যন্ত ধীর
hobs

4
কেবল রেকর্ডের জন্য: XZ_OPTএটি কার্যকর করা কোনও বৈশিষ্ট্য নয় tar। এটি এর একটি বৈশিষ্ট্য xz। যখন tarকল xz, env-পরিবর্তনশীল কেবল হস্তান্তর করা হয়।
সোভেন

14
XZ_OPT=-9e tar cJf tarfile.tar.xz directory

এর চেয়েও ভাল

XZ_OPT=-9 tar cJf tarfile.tar.xz directory

5
এটা কিভাবে ভাল? ই পতাকা কি করে?
সিএক্সডিএফ

2
option -e, --extremeকম্প্রেশন প্রিসেটটি পরিবর্তন করুন (-0 ... -9) যাতে কমপ্রেসার বা ডিকম্প্রেসারের মেমরির ব্যবহার না বাড়িয়ে কিছুটা আরও ভাল কম্প্রেশন অনুপাত অর্জন করা যায় (ব্যতিক্রম: সংক্ষেপণকারী মেমরির ব্যবহার প্রিসেটগুলির সাথে সামান্য বাড়তে পারে -0 ... -2)। খারাপ দিকটি হ'ল সংকোচনের সময়টি নাটকীয়ভাবে বৃদ্ধি পাবে (এটি সহজে দ্বিগুণ হতে পারে)।
ইভানড্রো

সুতরাং, আমি যদি আমার মেশিনে প্রায় 80 গিগাবাইট সফ্টওয়্যার সংক্ষেপিত করছি (যখন আমি চাই সমস্ত কম্পিউটারের সংস্থান গতির জন্য সংক্ষেপণ প্রক্রিয়াতে চলে যায়) তবে আমি ব্যবহার করব -9না -9e, তাই না ?
nyxee

1
এক্সজেড ডিফল্টরূপে 1 টি কোর / থ্রেড ব্যবহার করে, আপনি -T0 যোগ করে এটি সর্বাধিক গতিতে বাড়িয়ে তুলতে পারবেন (উদাহরণস্বরূপ)XZ_OPT="-9e -T0" tar -cJf ...
একরিখের

10

আপনার যদি 16 গিগাবাইট র‌্যাম থাকে (এবং অন্য কোনও কিছুই চলমান না থাকে), আপনি চেষ্টা করতে পারেন:

tar -cf - foo/ | xz --lzma2=dict=1536Mi,nice=273 -c - > foo.tar.xz 

এটি সংক্ষেপণের জন্য 1.5 জিবিবি প্রয়োজন হবে, এবং সংক্ষেপণের জন্য প্রায় 11x। স্বল্প পরিমাণে মেমরির জন্য সেই অনুযায়ী সামঞ্জস্য করুন।

এটি কেবলমাত্র সাহায্য করবে যদি ডাটা আসলে যে বড়, এবং কোন ক্ষেত্রে এটি সাহায্য করবে না যে অনেক, কিন্তু এখনও ...

আপনি যদি বাইনারিগুলি সংকুচিত করছেন তবে প্রথম xz বিকল্প হিসাবে --x86 যুক্ত করুন। আপনি যদি "মাল্টিমিডিয়া" ফাইলগুলি (অসম্পূর্ণ অডিও বা বিটম্যাপস) নিয়ে খেলছেন তবে আপনি --delta = dist = 2 দিয়ে চেষ্টা করতে পারেন (মান সহ পরীক্ষার জন্য ভাল মানগুলি চেষ্টা করার জন্য ১.৪)।

আপনি যদি খুব সাহসী বোধ করেন তবে আপনি আরও LZMA বিকল্পের মতো খেলতে চেষ্টা করতে পারেন

--lzma2=dict=1536Mi,nice=273,lc=3,lp=0,pb=2

(এগুলি ডিফল্ট সেটিংস, আপনি 0 এবং 4 এর মধ্যে মান চেষ্টা করতে পারেন এবং lc + lp অবশ্যই 4 এর বেশি হবে না)

ডিফল্ট এই মানগুলিতে মানচিত্র কীভাবে প্রसेट করে তা দেখতে, আপনি উত্স ফাইলটি src / liblzma / lzma / lzma_encoder_presets.c চেক করতে পারেন। সেখানে তেমন আগ্রহের কিছুই নেই (- এটি দুর্দান্ত দৈর্ঘ্য ২ 27৩ এ সেট করে এবং গভীরতাও সামঞ্জস্য করে)।


6

আপনি বিভিন্ন বিকল্প চেষ্টা করতে পারেন, আমার জন্য -4e আরও ভাল কাজ করে

tar cf - wam_GG_${dir}.nc | xz -4e > wam_GG_${dir}.nc.tar.xz 

আমি চালিয়ে পরীক্ষা করেছি:

$ tar -cf - wam_GG.nc | xz -4e > wam_GG.nc.xz
$ tar -cf - wam_GG.nc | xz -9e > wam_GG.nc.xz.2

সুতরাং, মনে হচ্ছে বিকল্প -4e -9e এর চেয়ে কিছুটা ভাল কাজ করে।

$ ll wam_GG.nc.xz*
-rw-rw-r--. 1 504 504 2707596 Jan 16  2015 wam_GG.nc.xz
-rw-rw-r--. 1 504 504 2708416 Jan 16  2015 wam_GG.nc.xz.2

3
এটি সত্যই প্রশ্নের উত্তর দেয় না। এটি কেবলমাত্র একটি পর্যবেক্ষণ যা আপনার নির্দিষ্ট ছোট ডেটা সেটের জন্য, -4 ই ইতিমধ্যে সর্বোত্তম সংকোচন লাভ করে এবং উচ্চতর স্তরগুলি আর কোনও সুবিধা পায় না (এবং এমনকি এতটা সামান্য জরিমানা)।
psusi

আপনি কি সিজিমন রোজিউস্কি হিসাবে একই ব্যবহারকারী ? যদি তা হয় তবে দয়া করে একাধিক উত্তর পোস্ট করবেন না। পরিবর্তে, আপনার মূল উত্তরটি সম্পাদনা করুন। আপনি যদি নিজের প্রথম অ্যাকাউন্টটি অ্যাক্সেস করতে না পারেন তবে আপনার অ্যাকাউন্টগুলিকে কীভাবে মার্জ করবেন তা দয়া করে এখানে দেখুন । ইতিমধ্যে, আমি আপনার পূর্ববর্তী উত্তর মুছতে এবং এটি এখানে অন্তর্ভুক্ত করছি।
টেরডন

ঠিক আছে, আমি সে সম্পর্কে আরও বিস্তৃত গবেষণা করেছি। আমি যা পেয়েছি তা এখানে। আমি আমার হার্ড্রাইভ থেকে কিছু ফাইল চয়ন করেছি এবং -4e এবং -9e বিকল্পের সাথে সংক্ষেপণ তৈরি করেছি। সুতরাং, নিজের দ্বারা নিজের সেরা সমাধানটি সন্ধান করা ভাল। আপনি ঠিক বলেছেন, কিছু ক্ষেত্রে -9e ভাল তবে অন্যটির জন্য এটি নয়:no difference = 660 4e better than 9e = 74 9e better than 4e = 17 total files = 751 tar 2 html 2 csv 2 xml 2 gz 2 ppt 2 eps 2 docx 2 gif 2 rpm 3 png 3 asv 3 xlsx 3 exe 3 rar 4 nc 4 txt 5 odt 6 xls 7 zip 7 doc 9 m 12 dat 17 other 109 pdf 133 135 jpg 270
সাইমন রোজিউস্কি

(মন্তব্যগুলি কেবল 5 মিনিটের জন্য সম্পাদনা করা যেতে পারে)txt 109 txt/pdf 135
সাইমন রোজিউস্কি

2
+1 টি। এটি ওপিকে ফাইল ব্যবহারের জন্য সর্বাধিক সংক্ষেপণ নির্ধারণের জন্য কোনও উপায় খুঁজে পেতে সহায়তা tarকরে xz
সাইচোই

5

tar --help : -I, --use-compress-program=PROG

tar -I 'xz -9' -cvf foo.tar.xz foo/  
tar -I 'gzip -9' -cvf foo.tar.gz foo/    

বাহ্যিক সংক্ষেপকগুলির সাথে সংকোচনের:

tar -I 'lz4 -9' -cvf foo.tar.lz4 foo/
tar -I 'zstd -19' -cvf foo.tar.zst foo/

বাহ্যিক সংক্ষেপকগুলি সঙ্কোচন করুন:

tar -I lz4 -xvf foo.tar.lz4  
tar -I zstd -xvf foo.tar.zst  

আর্কাইভ বাহ্যিক সংকোচকারী তালিকা:

tar -I lz4 -tvf foo.tar.lz4
tar -I zstd -tvf foo.tar.zst

1
এটি একটি কার্যকরী উত্তরের মতো বলে মনে হচ্ছে তবে এটি যেমন রয়েছে তার ফর্ম্যাটটি ঠিক করে এবং বিকল্পের ব্যাখ্যা -Iযুক্ত করে এটি ব্যাপকভাবে উন্নত হবে ।
ধাগ

4

tarকমান্ড Jxz ফাইলের জন্য পতাকা ব্যবহার করে। একটি উদাহরণ:

tar -cJvf foo.tar.xz foo/


2
Jইতিমধ্যে bdowning এর উত্তরে উল্লেখ করা হয়েছিল
Anthon

3

আগ্রহীদের -e9জন্য, -9আদর্শ ল্যাপটপের তুলনায় কম 0.4% ছোট, কমপ্রেসনে 20% ধীর, ডেকম্প্রেশনের জন্য 3% ধীর । পাইথন উত্স কোড ডিরেক্টরি কাঠামোয় সময় নির্ধারণ করা চলে।

সঙ্কোচন:

$ Tbefore=`date +%s%3N` && XZ_OPT=-9 tar cJf python3.6.tar.9xz Python-3.6.0 && Tafter=`date +%s%3N`
$ python -c "print((float($Tafter) - float($Tbefore)) / 1000.)"
43.87
$ Tbefore=`date +%s%3N` && XZ_OPT=-e9 tar cJf python3.6.tar.e9xz Python-3.6.0 && Tafter=`date +%s%3N`
$ python -c "print((float($Tafter) - float($Tbefore)) / 1000.)"
53.861

decompression:

$ Tbefore=`date +%s%3N` && tar xf python3.6.tar.9xz && Tafter=`date +%s%3N`
$ python -c "print((float($Tafter) - float($Tbefore)) / 1000.)"  && rm -rf Python-3.6.0
1.395
$ rm -rf Python-3.6.0
$ Tbefore=`date +%s%3N` && tar xf python3.6.tar.e9xz && Tafter=`date +%s%3N`
$ python -c "print((float($Tafter) - float($Tbefore)) / 1000.)"  && rm -rf Python-3.6.0
1.443

ফাইলের আকার:

$ rm -rf Python-3.6.0
$ Tbefore=`date +%s%3N` && tar xf Python-3.6.0.tar.xz && Tafter=`date +%s%3N`
$ python -c "print((float($Tafter) - float($Tbefore)) / 1000.)" && rm -rf Python-3.6.0
1.49
$ ls -al ?ython*
-rw-rw-r-- 1 hobs hobs 16378500 Dec 23 13:06 python3.6.tar.9xz
-rw-rw-r-- 1 hobs hobs 16314420 Dec 23 13:05 python3.6.tar.e9xz
-rw-rw-r-- 1 hobs hobs 16805836 Dec 23 12:24 Python-3.6.0.tar.xz

1
খারাপ ভেরিয়েবলের নাম চয়ন করা, কারণ একাধিক থ্রেডযুক্ত সংরক্ষণাগার সক্ষম করার জন্য টি0 বিকল্প।
ডিজেলি

@Zenly আপনি ঠিক বলেছেন! ধন্যবাদ! এটা পরিবর্তন।
hobs

2

এটি আপনার প্রশ্নের সঠিক উত্তর নয় তবে আপনি দুটিয়ের পরিবর্তে একটি আদেশ ব্যবহার করতে পারেন:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir1

ডিরেক্টরি "dir1" থেকে সমস্ত ফাইল আর্কাইভ আর্কাইভ 7 to "আল্ট্রাসে এটিংগুলি" ব্যবহার করে যুক্ত করে

সমর্থিত অন্যান্য ফর্ম্যাটগুলি হ'ল জিপ, জিজিপ, বিজিপ 2 বা টার। এই জন্য 7zপরে প্রতিস্থাপন -t
--উৎসman 7z

দ্রষ্টব্য: এই ফাইলটি ব্যাক্তিগত ফাইলগুলি ব্যাক্তিগত ফাইল ব্যাক আপ করার জন্য এই কমান্ডটি ব্যবহার করবেন না কারণ 7z ফর্ম্যাটটি ফাইল সিস্টেমের অনুমতি সংরক্ষণ করে না


5
প্রশ্নটি xz সম্পর্কে ছিল, 7z সম্পর্কে নয়, যদিও তারা উভয়ই এলজেডএমএ সংক্ষেপণ ব্যবহার করে।
আমেদী ভ্যান গ্যাস

2

Xz-utils এর সংস্করণ v5.2.0 থেকে একটি মাল্টিকোর মেশিনে, পরীক্ষা করুন:

-T, --threads=NUM   use at most NUM threads; the default is 1; set to 0

আপনি যদি সর্বোচ্চ সংখ্যক কোর এবং সর্বাধিক সংকোচনের ব্যবহার করতে চান:

export XZ_DEFAULTS="-9 -T 0 "

অথবা আপনি ব্যবহার করতে ইচ্ছুক কোরগুলির সংখ্যাতে টিটি সেট করুন।

তারপর:

tar cJf target.tar.xz source

সংক্ষেপণের স্তরটি চয়ন করতেও এটি কার্যকর হতে পারে:

https://catchchallenger.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO


1

আপনি যদি একাধিক থ্রেড ব্যবহার করে দ্রুত এটি সম্পূর্ণ করতে চান তবে অন্য কাজ সম্পাদন করার সময় আপনার সিস্টেমকে ধীর করে না ফেলে আপনি -Tnকোথায় কত থ্রেড ব্যবহার করতে চান তা যুক্ত করার চেষ্টা করুন , পাশাপাশি niceঅকার্যকর অগ্রাধিকারে সংক্ষেপণটি হ্রাস করতে চান adding

মডেল (4 টি থ্রেডের জন্য):

tar c foo/ | nice -n19 xz -9 -T4 > foo.tar.xz

দেখছে চেষ্টা করুন topবা htopআপনি একটি বড় ডিরেক্টরির (বেশ কয়েক GB) এর এই কাজটি করে। আশা করি আপনার xz19 টি ভাল মানের (সর্বনিম্ন অগ্রাধিকার) সহ কয়েকটি থ্রেড দেখতে হবে ।

আমি এটিকে বোধগম্য হিসাবে নিষ্ঠুর হতেও এটিকে নামিয়েছি, যেমন: -f -অন্যান্য উত্তরগুলিতে কেবল প্রয়োজন হয় না, যেহেতু tarডিফল্ট আউটপুট স্টাডআউট।

আপনি niceটার প্রক্রিয়াটিও করতে পারেন , তবে xzপাইপলাইনের জন্য সিপিইউকে সর্বদা বাধা দেওয়ার মতো আমি এটি কখনও খুঁজে পাইনি ।

ব্যবহারিক নোট, আমি খুব কমই xz -9কোনও কিছুর জন্য ব্যবহার করি, সিপিইউ বা সময়ের কারণে খুব বেশি নয়, তবে বেশি স্মৃতির চাহিদা রয়েছে বলে। Https://catchchallenger.first-world.info/wiki/Quick_Benchmark : _Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO# মেমরি_সম্পর্কিত_অন_ সংক্ষেপণ দেখুনxzসংকোচকারী, মত bzip2, কিন্তু অসদৃশ gzip, আরো মেমরি উচ্চতর কম্প্রেশন কারণের জন্য ব্যবহার করে। এটি যে xzকোনও অন্য সংক্ষেপকের চেয়ে অনেক বেশি মেমরি ব্যবহার করে এটি একসাথে রাখুন , আপনি সহজেই 600+ এমবি মেমরি ব্যবহার করতে পারেন। এবং যদি আপনি -Tথ্রেডেড সংক্ষেপণ সক্ষম করতে ব্যবহার করেন , মেমরির চাহিদা আরও আরও বাড়বে। সচেতন হওয়ার মতো কিছু, যেমন আপনি যদি 1-2 গিগাবাইট মেমরির সাহায্যে একটি ছোট ভিএম-তে কিছু ছোট পরিষেবা চালাচ্ছেন তবে আপনি অজান্তেই প্রভাব ফেলতে পারেন।


1

ম্যাক ওএস এক্সে, প্যারামিটারে পাস করার একটি বিকল্প পদ্ধতির সাথে পতাকা tarব্যবহার করা --options=। উদাহরণ স্বরূপ,

tar Jcvf targetFileName.tar.xz --options='compression-level=9' directoryName
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.