কিভাবে কেস এর সাথে সংবেদনশীল নিদর্শন মেলে?


57

আমি কেসটি উপেক্ষা করার সময় একটি নির্দিষ্ট প্যাটার্নের সাথে মেলে সমস্ত ফাইলের তালিকা করতে চাই।

উদাহরণস্বরূপ, আমি নিম্নলিখিত কমান্ডগুলি চালাচ্ছি:

ls *abc*

কেসটি উপেক্ষা করে এই ফাইলটির নামের অংশ হিসাবে "abc" থাকা সমস্ত ফাইল দেখতে চাই

-rw-r--r-- 1 mtk mtk 0 Sep 21 08:12 file1abc.txt
-rw-r--r-- 1 mtk mtk 0 Sep 21 08:12 file2ABC.txt

বিঃদ্রঃ

আমি মামলার জন্য ম্যান পৃষ্ঠাটি অনুসন্ধান করেছি, তবে কিছুই খুঁজে পেলাম না।

উত্তর:


65

এটি আসলে আপনার শেল দ্বারা সম্পন্ন হয়েছে, দ্বারা নয় ls

ইন bash, আপনি ব্যবহার করতে চাই:

shopt -s nocaseglob

এবং তারপরে আপনার কমান্ড চালান।

বা এতে zsh:

unsetopt CASE_GLOB

বা ইয়াশে:

set +o case-glob

এবং তারপরে আপনার আদেশ

আপনি লাগাতে যে মধ্যে চাইতে পারেন .bashrc, .zshrcঅথবা .yashrcযথাক্রমে।

বিকল্পভাবে, zsh সহ:

setopt extendedglob
ls -d -- (#i)*abc*

(এটি প্রতি-ওয়াইল্ডকার্ড ভিত্তিতে সংবেদনশীল গ্লোববিংয়ের পালা)

Ksh93 সহ:

ls -d -- ~(i:*abc*)

আপনি গ্লোব্বিংকে আলাদা আলাদাভাবে কাজ করতে চান না ls, যেমন lsশেলটি দিয়ে দেওয়া সমস্ত ফাইল ।


ব্যাশে, কীভাবে আসল সেটিংয়ে রিসেট করব, যদি আমি ব্যবহার করি shport -s nocaseglob?
mtk

6
@ এমটিকে: একটি বিকল্প সেট করতে , আপনি ব্যবহার করুন shopt -s; এটি আনসেট করতে, আপনি ব্যবহার করুন shopt -u। অন্যথা, আপনি ব্যবহার করে একটি subshell সবকিছু মোড়ানো পারেন ( ), যাতে সেটিং পিতা বা মাতা শেল প্রভাবিত করে না: (shopt -s nocaseglob ; ls *abc*)
রুখ

সুতরাং পসিক্স বা এসইউএস বা এর মতো কোনও (বহিরাগত) কোনও পোর্টেবল উপায় নেই [aA][bB][cC]?
টিমোথি গু

দুর্দান্ত সমাধান, আমি বিশ্বাস করতে পারি না আমি shoptব্যাশ ব্যবহারের শেষ 15 বছরে কমান্ডটি পাইনি !
রেজা সানাই

Jfg956 এর উত্তরটি সঠিক উত্তর (পরের উত্তর)। আপনার যদি এর জন্য একটি রেজিপ্স থাকে তখন শেল আচরণটি কেন পরিবর্তন করবেন?
এনজোরআর

20

পোলেমন দ্বারা ব্যাখ্যা হিসাবে, এটি শেল (এলএস নয়) যা *abc*ফাইলগুলির তালিকায় প্রসারিত । একে বলা হয় প্যাটার্ন ম্যাচিং

কেসটিকে উপেক্ষা করার জন্য পুরো প্যাটার্ন ম্যাচিং আচরণটি বাদ দিয়ে, আপনি এর চেয়ে প্যাটার্ন মিলের অন্য রূপটি ব্যবহার করতে পারেন *। নীচে আপনি ব্যাশে যা চান তা করবে:

ls *[aA][bB][cC]*

বাশ ম্যান থেকে:

[...] সংযুক্ত অক্ষরের যে কোনও একটির সাথে মিলে।

এটি যেখানে আপনি ব্যবহার করতে পারে আরো সূক্ষ্ম দানা ম্যাচিং পারবেন *[aA][bB]c*মেলে abcবা ABcকিন্তু abCবা ABC। বা ফ্রেঞ্চ ভাষায় একটি উদাহরণ, যেখানে আমি eচরিত্রের সমস্ত দৃষ্টান্তের সাথে মিল রাখতে চাই :

ls *[eéèêëEÉÈÊË]*

1
দুর্ভাগ্যক্রমে, প্যাটার্নটি দীর্ঘ হওয়ার সাথে সাথে এই পদ্ধতিরটি দ্রুত অযৌক্তিক হয়ে যায়। তবে ছোট জিনিসগুলির জন্য, এটি কাজ করে।
ডারোবার্ট

@ডারবার্ট: পুরোপুরি সত্য, বিশেষত (এবং এটি সম্ভবত কেস) শেলটি তুলনা করার আগে ছোট ফাইলগুলিতে সমস্ত ফাইলের নাম এবং ম্যাচের অনুরোধটি রেখে মেলা উপেক্ষা করার ক্ষেত্রে অনুকূল করেছে। তবে, এটি [...]অনেক ক্ষেত্রে কার্যকর হতে পারে এবং আমি যদিও এটি উল্লেখ করার মতো ছিল।
jfg956

1
এটি সঠিক উত্তর। শেল আচরণ পরিবর্তন করা হয় না।
এনজোরআর

লোকেলটি সঠিকভাবে সেট করা থাকলে আপনার সমতুল্য ক্লাস ব্যবহার করতে সক্ষম হওয়া উচিত [[=e=][=E=]]
বেনিয়ামিন ডাব্লু।

8

আপনি পেতে -i(--ignore-কেস) বিকল্প grepএবং নীচের আউটপুট যুক্ত করতে পারেন।

[root@localhost ~]# ls -l | grep -i abc
-rw-r--r--  1 root root    0 Feb 25 20:41 fileabc.txt
-rw-r--r--  1 root root    0 Feb 25 20:41 fileABC.txt

প্যাটার্ন মিলটি গ্রেপের তুলনায় আরও ভাল পারফরম্যান্স করেছে কারণ গ্রেপকে সমস্ত কিছু সংগ্রহ করা এবং তারপরে ফিল্টার করা দরকার। বড় ফোল্ডারের সাথে কাজ করার সময় একটি লক্ষণীয় পার্থক্য রয়েছে।
ওমি

@ ওমি অতিরিক্তভাবে, নিয়মিত এক্সপ্রেশন হ'ল পাঠ্যের জন্য , বিশেষত পাঠ্যের লাইন । ফাইলের নামগুলিতে নিউলাইনগুলি থাকতে পারে।
কুসালানন্দ

3

Ls এর মাধ্যমে এটি সম্ভব বলে আমি মনে করি না, তবে আপনি পরিবর্তে এটি ব্যবহার করতে পারেন:

find . -maxdepth 1 -iname '*abc*'

0

নিম্নলিখিত কোড ব্যবহার করুন:

LC_COLLATE=en_US ; export LC_COLLATE
ls *abc*
LC_COLLATE=C ; export LC_COLLATE

LC_COLLATE ভেরিয়েবল কি জন্য? আপনি আরও ব্যাখ্যা করতে পারেন
mtk

এই @ এমটিকে
ইউজার1678213

0

-iসংবেদনশীল বিকল্পটি যুক্ত করে আপনি ফাইলটি গ্রেইপ করতে পারেন ।

উদাহরণস্বরূপ উভয় সন্ধান abcএবং ABCআপনি এই আদেশটি চালাতে পারেন

    [root@mtk bin]# ls -l | grep -i abc
    640K -rw-r--r-- 1 mtk mtk 639K Sep 21 08:12 file1abc.txt
    676K -rw-r--r-- 1 mtk mtk 674K Sep 21 08:12 file2ABC.txt

5
লুইস পেরেজ আমি মনে করি -iআপনি কমান্ডের কোথাও বিকল্প ব্যবহার করেন নি।
মোংরেল


-2

Tcsh এ, .aliases এ একটি উপকরণ সেট করুন

alias lsnc "ls BS!* | sort -f "

("বিএস" = এক "ব্যাকস্ল্যাশ"; এটি আমার ব্রাউজারে দেখানোর জন্য এটি ব্যবহার করতে হয়েছিল))

এবং lsncপরিবর্তে ব্যবহার করুনls

ব্যাশে, .Bash_aliases মত একটি উপাধ চেষ্টা করে দেখুন

lsnc() { ls $1 | sort -f ; }

lsউদাহরণস্বরূপ, এর বিকল্পগুলির সাথে ls -lএখানে একটি সাধারণ ফিক্স দেওয়া হয়েছে:

tcsh শেল:

alias lsncl "ls -l BS!* | sort -f -k 9"

ব্যাশ:

lsncl() { ls -l $1 | sort -f -k 9 ; }

আপনি কি নিশ্চিত যে =lsnocase এর পরে একটি ' ' মিস করছেন না ?
অ্যান্থন

অ্যান্টন: সাইগউইন এবং উবুন্টু উভয়ের জন্য tcsh এবং ব্যাশের অধীনে (সংশোধিত) lsnc এবং lsncl কাজ করে। নোট করুন যে বাশের জন্য, আমি একটি ফাংশন ব্যবহার করছি, প্রতি সেউতে একটি "উপনাম" নয়। লেস্টার
লেস্টার ইঙ্গবার

অ্যান্টন: হ্যাঁ, আপনি সম্ভবত ব্যাশে উরফ ব্যবহার করতে পারেন যেমন ওরফে lsncl = 'ls -l $ 1 | বাছাই -f-কে 9 '
লেস্টার ইনবার

এই উত্তরটি নির্দিষ্ট প্রশ্নটিকে সম্বোধন করে না যা কে কে সংবেদনশীল হিসাবে বিবেচনা করার জন্য লোকে পাস করা ফাইলগুলি পাস করতে চায়। শেল থাকে তাহলে পাসের খুব অল্প ফাইল ls, কিছুই নেই lsএবং sortঅবস্থা ঠিক করতে পারেন। অন্যান্য উত্তরে উল্লিখিত হিসাবে, সমস্যার শেলটিতে সমাধান করা দরকার, lsসিনট্যাক্স দিয়ে নয় ।
মার্ক স্টসবার্গ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.