উত্তর:
দাবি অস্বীকার: এই উত্তরটি বিশেষত ব্যাশের সাথে কাজ করে তবে এর বেশিরভাগ অংশ বিশ্বব্যাপী নিদর্শন সম্পর্কিত প্রশ্নে প্রযোজ্য!
তারকা চরিত্রটি ( *
) একটি ওয়াইল্ডকার্ড। অক্ষরগুলির একটি নির্দিষ্ট সেট রয়েছে যা এটির স্থান গ্রহণ করবে এবং প্রথম অক্ষরটি বিন্দু হওয়া ( .
) সেগুলির মধ্যে একটি নয়। ইউনিক্স ফাইল সিস্টেমগুলি কীভাবে কাজ করে, ডট দিয়ে শুরু হওয়া ফাইলগুলিকে "লুকানো" হিসাবে বিবেচনা করা হয় তার কারণে এটি একটি বিশেষ ক্ষেত্রে। যে যেমন টুলস মানে cp
, ls
ইত্যাদি না তাদের "দেখুন" হবে না যদি না স্পষ্টভাবে তা করার কথা বলেন।
প্রথমে কিছু নমুনা ডেটা তৈরি করা যাক।
$ mkdir .dotdir{1,2} regdir{1,2}
$ touch .dotfile{1,2} regfile{1..3}
সুতরাং এখন আমাদের নিম্নলিখিত আছে:
$ tree -a
.
|-- .dotdir1
|-- .dotdir2
|-- .dotfile1
|-- .dotfile2
|-- regdir1
|-- regdir2
|-- regfile1
|-- regfile2
`-- regfile3
এবার কিছু গেম খেলি। echo
নির্দিষ্ট কমান্ডের জন্য নির্দিষ্ট ওয়াইল্ডকার্ড ( *
) কী হবে তা নির্ধারণ করতে আপনি কমান্ডটি ব্যবহার করতে পারেন :
$ echo *
regdir1 regdir2 regfile1 regfile2 regfile3
$ echo reg*
regdir1 regdir2 regfile1 regfile2 regfile3
$ echo .*
. .. .dotdir1 .dotdir2 .dotfile1 .dotfile2
$ echo .* *
. .. .dotdir1 .dotdir2 .dotfile1 .dotfile2 regdir1 regdir2 regfile1 regfile2 regfile3
$ echo .dotdir*
.dotdir1 .dotdir2
আপনি shopt -s dotglob
আচরণটি পরিবর্তন করতে কমান্ডটি ব্যবহার করতে পারেন *
যাতে regfile1
এটির মতো ফাইলগুলির সাথেও এটি মেলে .dotfile1
।
bash
ম্যান পৃষ্ঠা থেকে উদ্ধৃতি
dotglob If set, bash includes filenames beginning with a `.' in the results
of pathname expansion.
উদাহরণ:
$ shopt -s dotglob
$ echo *
.dotdir1 .dotdir2 .dotfile1 .dotfile2 regdir1 regdir2 regfile1 regfile2 regfile3
আপনি এই আদেশের সাহায্যে এই আচরণটি ফিরিয়ে দিতে পারেন:
$ shopt -u dotglob
$ echo *
regdir1 regdir2 regfile1 regfile2 regfile3
আপনি বলছেন cp
যে আপনি প্যাটার্নের সাথে মেলে এমন সমস্ত ফাইল অনুলিপি করতে চান *
, এবং কোনও ফাইল নেই n't
$ cp foo/.* .
অথবা আপনি যদি foo
ফোল্ডারে সবকিছু চান তবে এটি করতে পারেন :
$ cp foo .
অথবা আপনি স্পষ্ট করে বলতে পারেন:
$ cp foot/.* foo/* .
ব্রেস প্রসারণ ব্যবহার করে আরও কমপ্যাক্ট ফর্ম bash
:
$ cp foo/{.,}* .
echo
আপনার প্রস্তাবিত ফাইলের ধরণগুলি কী তা দেখতে আপনি যে কোনও সময় কৌশলটি ব্যবহার করতে পারেন (এটি তারার একটি অংশের অভিনব শব্দ)।
$ echo {.,}*
. .. .dotdir1 .dotdir2 .dotfile1 .dotfile2 abc regdir1 regdir2 regfile1 regfile2 regfile3
ঘটনাচক্রে আপনি যদি ফাইল + অন্যান্য ডিরেক্টরিগুলির একটি ডিরেক্টরি অনুলিপি করতে চলেছেন তবে আপনি সাধারণত এটি পুনরাবৃত্তভাবে করতে চান, এটি -R
স্যুইচ করুন cp
:
$ cp -R foo/. .
shopt -s dotglob
, echo *
তারপরে দেয়:.dotdir1 .dotdir2 .dotfile1 .dotfile2 regdir1 regdir2 regfile1 regfile2 regfile3
cp -r foo .
সাধারণত কাজ করবে না যেহেতু নিজেই cp
অনুলিপি করতে অস্বীকার করবে foo
, সম্ভবত আপনি বোঝাতে চেয়েছিলেন cp -R foo/. .
। (নোট cp -R
এটি মানক)
zsh
অন্তর্ভুক্ত নয় .
এবং ..
প্রসারে .*
। ইন zsh
, যদি কোনও প্যাটার্নটি মেলে না, কমান্ডটি বাতিল করা হয়েছে (বেশ সংবেদনশীলভাবে আবার), তাই সাধারণ ক্ষেত্রে, cp foo/{,.}* .
কোনও গোপনীয়তা না থাকলে বা গোপনীয় কোনও ফাইল না থাকলে ব্যর্থ হবে will
এর সাথে zsh
, সাধারণ উপায় হ'ল D
গ্লোব কোয়ালিফায়ার ব্যবহার করা ([ডি] ওটি ফাইল অন্তর্ভুক্ত করা):
cp foo/*(D) .
মনে রাখবেন যে D
জেডশ গ্লোবগুলি কখনই বা এর বাইরে থাকে .
না ..
(যেমনটি আপনি আশা করেছিলেন) include
শেলটি সেই ফাইলগুলিকে লুকানো হিসাবে বিবেচনা করে যখন *
অক্ষরটি সমাধান হয় , সুতরাং cp
এই ফাইলগুলির কোনও নাম আর্গুমেন্ট হিসাবে গ্রহণ করে না।
আপনি এগুলি স্পষ্ট করে নির্দিষ্ট করে কপি করতে পারেন cp foo/.* .
আপনি যা করতে চাইছেন তা যদি সমস্ত ফাইল এবং ডিরেক্টরিগুলি এক জায়গা থেকে অন্য জায়গায় অনুলিপি করে থাকে তবে আপনি স্ট্যান্ডার্ড rsync
কমান্ডটি ব্যবহার করতে পারেন । উদাহরণস্বরূপ আপনি উপরে দিয়েছেন:
mkdir foo && touch foo/.test
rsync -a foo/ .
foo
লুকানো ফাইল এবং লুকানো ডিরেক্টরি সহ সমস্ত সামগ্রীর পুনরাবৃত্তভাবে বর্তমান ডিরেক্টরিতে অনুলিপি করবে । শেষের দিকে পিছনের foo/
স্ল্যাশটি RSSync করা গুরুত্বপূর্ণ; এটির সাথে কেবলমাত্র লিখিত সামগ্রীগুলি foo
অনুলিপি করা হয়, এটি ছাড়া আরএসসিএনসিও অনুলিপি করে foo
। উদাহরণ স্বরূপ:-
mkdir src && mkdir dest && touch src/.test
rsync -a src dest // copies 'src' contents to 'dest/src'
rsync -a src/ dest // copies 'src' contents to 'dest'
মেশিনের মধ্যে অনুলিপি সহ আরও অনেক অপশন উপলভ্য টুইঙ্ক আরএসসিএনসি রয়েছে।
dotglob
থেকে অনুবাদ করা হয়globdots
দ্বারা zsh যার জন্য অবৈধ বিকল্প নাম ব্যাশ ।