*শেল দ্বারা প্রসারিত একটি গ্লোব হয়। ডিফল্ট শেলগুলি এমন ফাইলগুলিকে অন্তর্ভুক্ত করে না যার নাম শুরু হয় .(যাকে বলা হয় লুকানো ফাইল বা ডটফিলস) যদি না নেতৃস্থানীয় .আক্ষরিক প্রবেশ না করে ।
*বা [.]*বা ?*বা *.*বা dir/*dotfiles অন্তর্ভুক্ত করবে না।
.*বা dir/.*হবে।
সুতরাং আপনি করতে পারেন:
mv -- * .* /dest/
তবে কিছু শাঁস সহ bash(তবে তা নয় zsh, mkshনা fish) এই অপব্যবহার রয়েছে যে প্রসারিত প্রসারণটি এবং বিশেষ ডিরেক্টরি এন্ট্রিগুলি .*অন্তর্ভুক্ত রয়েছে , যা আপনি এখানে চান না (এবং সাধারণত কোনও গ্লোবও অন্তর্ভুক্ত করতে চান না যার কারণে আমি এটিকে অপব্যবহার বলি)।...
সেই কারণে আপনি দেখতে পাবেন যে কখনও কখনও লোকেরা ব্যবহার করে (বোর্নের মতো শেলগুলিতে):
mv -- * .[!.]* ..?* /dest/
এটি তিনটি গ্লোব, প্রথমটি নন-লুকানো ফাইলগুলির সাথে মিলিত, দ্বিতীয় একটি ফাইলের নাম এবং তার পরে .অন্য একটি অক্ষর .এবং তৃতীয় একটি ফাইলের নাম ..অন্তত একটি অক্ষর দ্বারা শুরু হওয়া ।
তবে কিছু আধুনিক শেলগুলির কাছাকাছি আরও ভাল উপায় রয়েছে
zsh
এর সাহায্যে zshআপনি (D)গ্লোব কোয়ালিফায়ার ব্যবহার করে গ্লোবটিতে ডটফাইলগুলি অন্তর্ভুক্ত করা উচিত তা নির্দিষ্ট করতে পারেন :
mv -- *(D) /dest/
zshএছাড়াও বোর্ন শেলের অন্য ভুল বৈশিষ্ট্য এটি ঠিক করেছে যে প্যাটার্নটি মেলে না, mvকমান্ডটি চালানো হয় না।
যেমন উপরে বলা হয়েছে এটি কখনও অন্তর্ভুক্ত করবে না .বা ..তার গ্লোবগুলিতেও তাই হবে না
mv -- * .* /dest/
নিরাপদ হবে। তবে, যদি কোনও ফাইলের মিল নেই *বা .*কমান্ডের সাথে মেলে কোনও ফাইল বাতিল করা হবে, সুতরাং এটি ব্যবহার করা ভাল:
mv -- (*|.*) /dest/
অন্য কয়েকটি শেলের মতো আপনিও সমস্ত গ্লোবগুলিকে ডটফাইলগুলি অন্তর্ভুক্ত করতে বাধ্য করতে পারেন (উদাহরণস্বরূপ যদি আপনি নিজেকে ডটফাইলগুলি প্রায়শই অন্তর্ভুক্ত করতে চান তবে) এর সাথে:
setopt dotglob
বা:
set -o dotglob
এর পরে, আপনি যদি কোনও নির্দিষ্ট গ্লোব ডটফিলগুলি অন্তর্ভুক্ত না করতে চান তবে আপনি এটি লিখতে পারেন:
echo *(^D)
বা:
echo [^.]*
সজোরে আঘাত
দুর্ভাগ্যক্রমে bashগ্লোব কোয়ালিফায়ার নেই। সুতরাং আপনি বিশ্বব্যাপী ডটফিল অন্তর্ভুক্তি সক্ষম করে রেখেছেন। ইন bash, বাক্য গঠনটি হ'ল:
shopt -s dotglob
(এবং [^.]*লুকানো ফাইল ছাড়াই গ্লোবগুলির জন্য ব্যবহার করুন )।
সঙ্গে dotglob, bashঅন্তর্ভুক্ত না .কিংবা ..মত globs মধ্যে *, কিন্তু এখনও মত globs জন্য করে .*।
আপনি সেট করেন তাহলে GLOBIGNOREকিছু খালি নয় এমন পরিবর্তনশীল, এটা তখন স্বয়ংক্রিয়ভাবে সক্ষম dotglobবিকল্প এবং বাদ .এবং ..থেকে .*globs কিন্তু থেকে dir/.*বা .*/fileবেশী (!) যাতে রক্ষাকবচ চমত্কার অনর্থক। আপনি কাজ করতে পারে GLOBIGNORE='*/.:*/..:./*:../*:*/./*:*/../*'কিন্তু তারপর এটা পছন্দ globs বিরতি দেবে */.বা ./*অথবা ../*।
একটি ভাল কাজ প্রায় ব্যবহার করা [.]*বা dir/[.]*বা [.]*/file(সঙ্গে dotglobসক্ষম করা থাকে) ব্যতীত dotfiles প্রসারিত করতে .এবং ..।
মাছ
fishগ্লোবগুলিও অন্তর্ভুক্ত .নয় ..। সংস্করণের উপর নির্ভর করে কোনও মিল নেই, তখন এটি zsh(বা bash -o failglob) বা এর মতো কাজ করবে bash -o nullglob।
mv -- * .* /dest/
যদি লুকানো এবং গোপন না থাকা উভয় ফাইলই কাজ করে। অন্যথায়, ওয়াইএমএমভি এবং কিছু সংস্করণ সহ, mv -- /destকোনও ফাইল না থাকলে এটি কল করতে পারে ।
ksh93
ksh93উভয়ই গ্লোব কোয়ালিফায়ার । আপনি গ্লোবগুলিতে ডটফাইলগুলি এর সাথে অন্তর্ভুক্ত করতে পারেন:
FIGNORE='@(.|..)'
পক্ষান্তরে bashএর GLOBIGNORE, যে সঠিকভাবে সম্পন্ন এবং এর সমস্যা সমাধান করা হয়েছে .*সহ .এবং ..।
যশ
yashএকটি dot-globবিকল্প আছে ( set -o dot-glob), কিন্তু এর বিপরীতে bash, গ্লোব সম্প্রসারণ (এমনকি এর *) এর অন্তর্ভুক্ত রয়েছে .এবং ..তাই এটি বেশ অকেজো।
tcsh শেল
set globdot
মধ্যে মত কাজ করে bash, অর্থাৎ *ব্যতীত ডট ফাইল অন্তর্ভুক্ত .এবং ..কিন্তু .*এখনও রয়েছে .এবং ..(এবং আপনি ব্যবহার করতে পারেন [.]*ব্যতীত লুকানো ফাইল প্রসারিত করতে .এবং ..)।