আমি একটি জিজেপড ফাইল তৈরি করতে চাই যা মূল ফাইলের নাম ধরে রাখে। উদাহরণস্বরূপ gziping "উদাহরণ.txt" এর "উদাহরণ.txt.gz" এর পরিবর্তে "উদাহরণ.txt" নামে একটি জিপিড ফাইল আউটপুট করা উচিত। এক কমান্ড (পরবর্তীটি না করে mv
) মার্জিতভাবে এটি করা সম্ভব ?
আমি একটি জিজেপড ফাইল তৈরি করতে চাই যা মূল ফাইলের নাম ধরে রাখে। উদাহরণস্বরূপ gziping "উদাহরণ.txt" এর "উদাহরণ.txt.gz" এর পরিবর্তে "উদাহরণ.txt" নামে একটি জিপিড ফাইল আউটপুট করা উচিত। এক কমান্ড (পরবর্তীটি না করে mv
) মার্জিতভাবে এটি করা সম্ভব ?
উত্তর:
এটা কাজ করে না:
# echo Hello World > example.txt
# gzip < example.txt > example.txt # WRONG!
# file example.txt
example.txt: gzip compressed data, from Unix, last modified: Thu Mar 21 19:45:29 2013
# gunzip < example.txt
<empty file>
এটি একটি রেসের শর্ত:
# echo Hello World > example.txt
# dd if=example.txt | gzip | dd of=example.txt # still WRONG!
# gunzip < example.txt
Hello World # may also be empty
সমস্যাটি হ'ল অন্যান্য প্রক্রিয়াটি পড়ার সুযোগ পাওয়ার আগেই > example.txt
(বা dd of=example.txt
সেই বিষয়ে) ফাইলটিকে হত্যা করে। সুতরাং কোনও সুস্পষ্ট সমাধান নেই, এ কারণেই আপনার আটকে থাকা উচিত mv
।
আপনি প্রতারণা করতে পারেন বিভিন্ন উপায় আছে। আপনি ফাইলটি খুলতে পারবেন, তারপরে এটি লিঙ্কমুক্ত করুন - আপনি এটি বন্ধ না হওয়া পর্যন্ত ফাইলটি বিদ্যমান থাকবে - এবং তারপরে একই নাম দিয়ে একটি নতুন ফাইল তৈরি করুন এবং এতে জিপিড ডেটা লিখবেন। তবে আমি এটি ব্যবহারের জন্য বাশকে বাধ্য করার কোনও সুস্পষ্ট উপায় জানি না এবং এমনকি যদি আমি তা করি তবে আমার উত্তরটি এখনও থাকবে:
এমনকি এটি না।
যদি gzip
কোনও কারণে ব্যর্থ হয়, বা কোনও সমস্যা দেখা দেয় যেমন গিজিপিংয়ের সময় আপনি স্থানের বাইরে চলে যান (কারণ অন্যান্য প্রক্রিয়াগুলি লিখছে, বা জিজিপ ফলাফল ইনপুটটির চেয়ে বড় - যা এলোমেলো ডেটার জন্য ঘটে - ইত্যাদি) তবে আপনি কেবল নিজের ফাইলটি হারিয়েছেন । অভিনন্দন!
একটি পৃথক ফাইল এবং mv
সাফল্যের উপর তৈরি করুন । এটি হ'ল সহজ, বোঝা সহজ এবং সবচেয়ে নির্ভরযোগ্য পদ্ধতি যা আপনি কখনও পাবেন।
gzip example.txt && mv example.txt.gz example.txt
mv
সাফল্যের ভিত্তিতে তৈরি করুন ।" আরও মার্জিত করা যায়? আমি কেবল প্রস্তাব দেওয়ার চেষ্টা করছিলাম যে ফ্রস্টশুটসের উত্তরটি একটি নির্দিষ্ট উদাহরণ দিয়ে বাড়ানো হোক। mv
আমি যতটা ভেবেছিলাম তার চেয়ে বেশি মার্জিতভাবে যদি ব্যবহার করা যায় তবে দয়া করে একটি উদাহরণ দিন।
আমার একই সমস্যা ছিল, সিআইয়ের অংশ হিসাবে এডাব্লুএস এস 3-তে মোতায়েন করা।
.gz
প্রত্যয় ছাড়াই পুনরুক্তি দিয়ে একটি ডিরেক্টরি (জায়গায়) গিজিপ করার জন্য আমি এটি করেছি :
find . -type f -exec gzip "{}" \; -exec mv "{}.gz" "{}" \;
আমার জন্য যথেষ্ট পরিষ্কার বলে মনে হচ্ছে। তবে হ্যাঁ মনে হচ্ছে আপনার mv
কোথাও কোথাও প্রবেশ করা দরকার।
আপনি যদি ব্যবহার করেন তবে grunt
আপনি দেখতে পারেন grunt-contrib-compress
। grunt
বিশেষত এস 3-তে মোতায়েনের জন্য কয়েকটি সরঞ্জাম আপনার জন্য জিজিপ পরিচালনা করবে।
find . -type ...
নয় find.
দয়া করে :)
-S
আপনি চান এক্সটেনশন
gzip -S "`_date +%Y_%M' dog.txt
dog.txt_2015_11 এর ফলাফল হবে
আপনি যখন এটি আনজিপ করবেন তখন আপনাকে অবশ্যই এক্সটেনশনটি নির্দিষ্ট করতে হবে।
gzip -d _2015_11 dog.txt_2015_11
ইউনিক্সে আপনার কাছে কী ধরণের ফাইল রয়েছে তা নির্ধারণ করতে ফাইল কমান্ডটি ব্যবহার করুন, এক্সটেনশনগুলি প্রায়শই বিভ্রান্ত করছে, বা প্রায়শ অনুপস্থিত।
আমি মনে করি না কোনও এক্সটেনশন ছাড়াই একটি জিজিপ ফাইল তৈরি করা সঠিকভাবে করা উপযুক্ত জিনিস।
IMGo .gz ফাইলটি পড়ার জন্য আপনার ওয়েব সার্ভারটি কনফিগার করা উচিত। আপনার সম্ভবত ইতিমধ্যে এর মতো একটি বিধি রয়েছে:
Path asets/:
If header Accept-Encoding contains "gzip" and not contains "gzip;q=0":
Add header Content-Encoding: gzip
".Gz" সংযুক্ত করার জন্য আপনাকে অনুরোধ করা ফাইল নামটি পুনরায় লেখার জন্য একটি নিয়ম যুক্ত করতে হবে (প্রকৃতপক্ষে, আপনার ফাইলটি উপস্থিত রয়েছে কিনা তা পরীক্ষা করা উচিত, ঠিক যেমন আপনার যাচাই করা উচিত যে ক্লায়েন্টটি স্বীকৃত-এনকোডিং শিরোনামে জিজপ তালিকা করেছে)
আপনি এর জন্য s3_website চেষ্টা করতে পারেন ।
এটি স্কেল এবং রুবি উভয় ক্ষেত্রেই লেখা আছে এবং এটির একটি জেভিএম দরকার তা আমি পছন্দ করি না। এছাড়াও এটি অনুমানটি আমি পছন্দ করি না (বিশেষত সত্য যে এটি বালতি থেকে অতিরিক্ত ফাইল মুছে ফেলে) তবে আপনি যদি ঠিক থাকেন তবে এটি কাজ করা উচিত।
আমি নিজেই এমন একটি সরঞ্জাম লেখার পরিকল্পনা করছি যার এই সীমাবদ্ধতা নেই, থাকুন।
এটি সত্যিই এমন কিছু নয় যা আপনার করা উচিত, মূলত কারণ যখন এই ফাইলটি অন্য সিস্টেম বা লোকের কাছে স্থানান্তরিত করা হয় তখন এটি তাদের জন্য বিভ্রান্তিকর হয়ে উঠতে পারে এবং এটি একটি সংকোচিত ফাইল হিসাবে খুঁজে না পাওয়া যায়।
যদি আপনি কোনও প্রত্যয় ব্যবহার করতে না চান, তবে জিএনইউ আপনার পক্ষে ভাল নয়, যেমনটি gzip -S ""
ফিরে আসবে gzip: invalid suffix ''
।
তবে আপনি সর্বদা gzip -S " "
(ফাঁকা জায়গা) এর মতো কিছু পাঠাতে পারেন এবং এটি এটির মতো দেখানো হবে:
$ file testfile\
testfile: gzip compressed data, was "testfile", from Unix, last modified: Tue Jun 3 XX:XX:XX 2014
এরপরে, আপনি যদি এটি সঙ্কুচিত করতে চান তবে আপনাকে এমন কিছু করতে হবে gunzip -c testfile\
(প্রত্যয়টি নির্দিষ্ট করে না দিয়ে), এমনকি -f
পতাকা সহও।
আমি আন্তরিকভাবে মনে করি যে একটি mv
কমান্ড যুক্ত &&
করা আপনার কোডে এত ঝামেলা সৃষ্টি করবে না। যাইহোক, এবং যেমন @ ফ্রসচুটজ বলেছেন, এটি করা সত্যিই ভাল ধারণা নয়।