আপনি গ্লোবস্টার ব্যবহার করতে পারেন।
সঙ্গে globstarশেল বিকল্প সক্রিয় করা হলে, আপনার প্রয়োজন হয় gzip -vk **/*.{css,html}।
বাশ শেলের একটি globstarবিকল্প রয়েছে যা আপনাকে পুনরাবৃত্ত গ্লোবগুলি দিয়ে লিখতে দেয় **। shopt -s globstarএটি সক্ষম করে তবে আপনি যে কমান্ডগুলি পরে চালাবেন সেটির জন্য আপনি এটি নাও করতে চাইতে পারেন, সুতরাং আপনি এটির পরিবর্তে এটি এবং আপনার gzip কমান্ডটি সাব-শেইলে চালাতে পারেন ।
এই কমান্ডের gzipসব গুলি .cssএবং .htmlকোন তার সাবডিরেক্টরি বর্তমান ডিরেক্টরির মধ্যে ফাইল, কোনো তাদের সাবডিরেক্টরি, ইত্যাদি, মূল ফাইল (পালন -k) এবং আপনি এটি (কি করছে কহন -v):
(shopt -s globstar; gzip -vk **/*.{css,html})
যদি আপনি ফাইল-নামগুলি কেস-সংবেদনশীলতার সাথে মেলতে চান তবে কিছু বা সমস্ত অক্ষরের সাথে বড় আকারের সেই এক্সটেনশনগুলি অন্তর্ভুক্ত করা হয়, তবে আপনি nocaseglobশেল বিকল্পটি সক্ষম করতে পারেন :
(shopt -s globstar nocaseglob; gzip -vk **/*.{css,html})
;দুটি কমান্ড পৃথক করে, এবং বহিরাগত ( )তাদের একটি সাব-শেলের মধ্যে চালিত করে। একটি সাব-শেলের মধ্যে একটি শেল বিকল্প সেট করার কারণে এটি কলিং শেলটিতে সেট হয়ে যায় না। আপনি যদি সক্ষম করতে চান globstarতবে আপনি চালাতে পারবেন shopt -s globstar; তাহলে আপনি কেবল কমান্ডটি চালাতে পারেন:
gzip -vk **/*.{css,html}
আপনি নিষ্ক্রিয় করতে পারেন globstarসঙ্গে shopt -u globstar। এটি বর্তমানে সক্রিয় করা আছে কিনা তা আপনি পরীক্ষা করতে পারেন shopt globstar।
কিভাবে এটা কাজ করে
এই gzipকমান্ডটি কীভাবে কাজ করে তার মূল কীটি হ'ল ডিরেক্টরি হায়ারার্কির প্রতিটি ফাইলের একটি তালিকা মিলে যাওয়া নামের সাথে তৈরি করার জন্য শেলটি এর উপর বিস্তৃততা সম্পাদন করে, তারপরে এই ফাইলটির প্রত্যেকটির নাম আর্গুমেন্ট হিসাবে পাস করে gzip।
- ব্রেস সম্প্রসারণ পরিণত
**/*.{css,html}হয় **/*.css **/*.html।
- তারপরে গ্লোব্বিং সেই দুটি নিদর্শনগুলি বর্তমান ডিরেক্টরিতে (
**, কারণে globstar) এর অ্যাক্সেসযোগ্য ফাইলগুলির নামগুলিতে প্রসারিত করে যার ফাইলনামগুলিতে* নির্দিষ্ট (প্রত্যেকে ) .cssবা ( .htmlএই ক্ষেত্রে) এর পরে কিছু ( ) অন্তর্ভুক্ত রয়েছে।
এটি যাদের নামের সাথে শুরু হয়. বা ডিরেক্টরিতে এই নামে নাম লেখানো ফাইলগুলির সাথে এটি মেলে না । আপনার কাছে সম্ভবত এই জাতীয় কোনও এইচটিএমএল এবং সিএসএস ফাইল নেই এবং যদি আপনি এটি করেন তবে আপনি সম্ভবত সেগুলি অন্তর্ভুক্ত করতে চান না। তবে আপনি যদি সেগুলি অন্তর্ভুক্ত করতে চান না, তবে আপনি আপনার প্রয়োজনের উপর নির্ভর করে তাদের সাথে সুস্পষ্টভাবে মেলে নিতে পারেন। উদাহরণস্বরূপ, পরিবর্তন **/*.{css,html}করার জন্য **/{,.}*.{css,html}যে ফাইল দিয়ে শুরু অন্তর্ভুক্ত .এখনও না ফোল্ডার যে অনুসন্ধানের।
আপনি যদি দুটি ফাইলই চান যার নাম দিয়ে শুরু হয় .এবং যে ডিরেক্টরিগুলির নামগুলি .অন্তর্ভুক্ত করা উচিত সেগুলিতে ফাইলগুলি , একটি ক্লিনার এবং সহজ উপায় আছে: dotglobশেল বিকল্পটি সক্ষম করুন ।
(shopt -s globstar dotglob; gzip -vk **/*.{css,html})
অথবা আপনি যদি ফাইল -এর সাথে কেস-সংবেদনশীল ম্যাচিং এবং মিল শুরু করতে চান তবে .:
(shopt -s globstar nocaseglob dotglob; gzip -vk **/*.{css,html})
**খুব দীর্ঘ কিছুতে প্রসারিত করার জন্য এটি খুব বিরল হলেও সম্ভব ।
আপনার যদি এই নামে নামের প্রচুর ফাইল থাকে তবে এটি ত্রুটি বার্তায় ব্যর্থ হতে পারে যা ব্যাখ্যা করে যে শেলটি কমান্ড লাইনটি তৈরি করতে পারে না কারণ এটি খুব দীর্ঘ হবে। (হাজার হাজার ফাইল সহ, এটি সাধারণত কোনও সমস্যা হয় না))
gzip একেবারেই ডাকা হবে না, সুতরাং আপনি অর্ধেক কাজ পাবেন না।
এই ত্রুটি যদি সেটা হয়, অথবা যদি আপনি এটি সম্পর্কে চিন্তিত হয়ে গেলে, আপনি ব্যবহার করতে পারেন findসঙ্গে -exec, হয় যেমন steeldriver বর্ণনা (সঙ্গে {} \;) অথবা হিসাবে আমি (সঙ্গে নীচে বর্ণনা {} +)।
আপনি ব্যবহার করতে পারেন findসঙ্গে -execঅ্যাকশন ও +দক্ষতা জন্য।
gzipকমান্ড সমর্থন দেয়া হচ্ছে একাধিক ফাইল নাম সংকুচিত করা হবে। তবে এই findকমান্ডটি যদিও এটি ভালভাবে কাজ করে এবং আপনার অনেক ফাইল না থাকলে ধীর হবে না , প্রতিটি ফাইলের gzipজন্য একবার কমান্ডটি চালায় :
find . \( -name \*.css -o -name \*.html \) -exec gzip -vk {} \;
এটি কাজ করে এবং আপনি অবশ্যই এটি ব্যবহার করতে পারেন। ( .বর্তমান ডিরেক্টরি থেকে অনুসন্ধান করে that এছাড়াও, স্টিল্ড্রাইভারের খুব ভাল উত্তরে কমান্ডটি লেখার এটি কিছুটা ভিন্ন উপায় ; আপনি যে কোনও স্টাইলই পছন্দ করেন ব্যবহার করতে পারেন))
আপনি findএকাধিক ফাইলের নাম পাসও করতে gzipএবং এটি প্রয়োজনীয় হিসাবে কেবল বহুবার চালাতে পারেন - যা প্রায় সবসময় কেবল একবার। এটি করতে, পরিবর্তে ব্যবহার +করুন\; । +যুক্তি পরেই আসা উচিত {}। অতিরিক্ত ফাইল নামগুলির সাথে findপ্রতিস্থাপন +করে, যদি কোনও হয়।
find . \( -name \*.css -o -name \*.html \) -exec gzip -vk {} +
+কেবলমাত্র কয়েকটি সংখ্যক ফাইলের ফাইল থাকলেও এটি ব্যবহার করা ঠিক আছে এবং এর মধ্যে অনেকগুলি উপস্থিত থাকলে gzipপ্রতিটি ফাইলের জন্য পৃথক প্রার্থনা করার চেয়ে এটি লক্ষণীয়ভাবে দ্রুত হতে পারে ।
স্টিল্ড্রাইভার যেমন উল্লেখ করেছেন , আপনি ফাইলটির সাথে মিল রেখে তার নামের -inameপরিবর্তে বা বিভিন্ন মূলধনের সাথে ব্যবহার করতে পারেন । সক্রিয় এই অনুরূপ মধ্যে ভিত্তিক পদ্ধতি উপরে বর্ণিত।-name.css.htmlnocaseglobglobstar
শেষ অবধি, আপনার কাছে সম্ভবত কোনও মেলানো ফাইল বা ডিরেক্টরি নেই যা শুরু হয় .। তবে আপনি যদি করেন তবে findস্বয়ংক্রিয়ভাবে সেগুলি অন্তর্ভুক্ত করে। যদি আপনি এগুলি বাদ দিতে চান ( বন্ধ globstarথাকাকালীন উপরে উল্লিখিত ভিত্তিক পদ্ধতিটি যেমন ঘটে থাকে dotglob), আপনি করতে পারেন :
find . -not -path '*/.*' \( -name \*.css -o -name \*.html \) -exec gzip -vk {} +
globstarভিত্তিক পথ উপরে বর্ণিত লিখতে সহজ হয়, বিশেষ করে যদি আপনি ব্যতীত ডিরেক্টরি এবং ফাইল দিয়ে শুরু করছি ., যেহেতু ডিফল্ট আছে।
কি না করতে ...
ফাইলের নামগুলিতে পাথ বিভাজক /এবং নাল অক্ষর ব্যতীত অন্য কোনও অক্ষর থাকতে পারে । অদ্ভুত ফাইলের নাম ভাঙার অনেক কৌশল রয়েছে এবং এগুলি সাধারণত সবসময় কাজ করে এমন কৌশলগুলির চেয়ে সাধারণত আরও জটিল । সুতরাং আমি তাদের এড়াতে পরামর্শ দিচ্ছি এমনকি যখন আপনি জানেন (বা মনে হয় আপনি জানেন) তারা আপনার নির্দিষ্ট পরিস্থিতিতে ঠিক আছে। এবং অবশ্যই আপনার অবশ্যই সেগুলি ব্যবহার করা উচিত নয় যদি আপনার কাছে এমন অক্ষরগুলির সাথে ফাইলের নাম থাকতে পারে যা স্পেসগুলি সহ বিশেষভাবে বিবেচিত হতে পারে।
findঅন্য কমান্ডের আউটপুটটি নিরাপদে পাইপ করা সম্ভব যা আপনি যদি-print0 এটি ব্যবহার করেন বা অনুরূপ কোনও ক্রিয়াকলাপ এটির জন্য একটি নিউলাইন পরিবর্তে পাথের মধ্যে নাল অক্ষর রাখার কারণ হয়ে থাকে , অন্যথায় নয়। ফাইলের নামগুলিতে নিউলাইনগুলি থাকতে পারে (যদিও আমি তাদের সাথে ইচ্ছাকৃতভাবে ফাইলের নামকরণ করা থেকে নিরুৎসাহিত করি)। ক্রিয়া সহ একটি findকমান্ড -print- কোনও স্পষ্ট ক্রিয়া ছাড়াই কমান্ড সন্ধান সহ, তখন থেকে -printপূর্বনির্ধারিত - আউটপুট উত্পাদন করে না যা নিরাপদে পাইপ করা যায় বা অন্যথায় ফাইলগুলিতে ক্রিয়া সম্পাদন করে এমন অন্য কমান্ডকে সরবরাহ করা হয়।
কর্মটি findসহ উত্পাদিত আউটপুটটি -print0নিরাপদে পাইপ করা যেতে পারে xargs -0( -0পতাকা xargsনাল-পৃথক ইনপুট আশা করতে বলে )।
-rডিজাইন হিসাবে কাজ করে। ম্যান জিজিপ থেকে : ডিরেক্টরি কাঠামোটি পুনরাবৃত্তভাবে ভ্রমণ করুন। কমান্ড লাইনে নির্দিষ্ট করা ফাইলের যে কোনও ডিরেক্টরি যদি ডিরেক্টরি হয় তবে gzip ডিরেক্টরিতে নেমে সেখানে উপস্থিত সমস্ত ফাইল সংকুচিত করবে (বা বন্দুকের ক্ষেত্রে সেগুলি সঙ্কুচিত করবে)। (জোর আমার)