ম্যাক ওএসএক্সে কেস-সংবেদনশীল এলএস বাছাই করা


30

আমি lsকীভাবে উবুন্টু লিনাক্স (কেস-সংবেদনশীল, ডিরেক্টরিতে শীর্ষে নেই, ডট ফাইল শীর্ষে নেই) এর অনুরূপ ফাইল ও ডিরেক্টরিগুলিকে সর্বাধিক ওএস এক্স এক্স লায়ন অনুসারে বাছাই করতে পারি? আদর্শভাবে আমি অন্য কমান্ড যেমন বাছাইয়ের আউটপুট পাইপ না করে এটি করতে চাই।

উদাহরণস্বরূপ, আমি দেখতে চাই:

foo
Foobar
MyStuff/
.stuff/
test.txt

পরিবর্তে:

.stuff
Foobar
MyStuff/
foo
test.txt

লিনাক্সে, lsবাছাইয়ের ক্রমটি সিস্টেমের লোকাল দ্বারা বিশেষত নিয়ন্ত্রিত হয় LC_COLLATE। যখন LC_COLLATE=en_US.UTF-8, ls আমার পছন্দ মতো আইটেমগুলি বাছাই করে। কখন LC_COLLATE=C, lsওএস এক্স এর অনুরূপ বাছাই করবে

LC_COLLATEen_US.UTF-8ওএস এক্স এ সেট করা আছে তবে lsএখনও এটি পুরানো POSIXউপায়ে সাজায় । কেউ কি জানেন যে আমি কীভাবে এই লিনাক্সের মতো আচরণ করতে পারি?


যদি এটি সহায়তা করে: আপেল.স্ট্যাকেক্সেঞ্জারএইভিএ / 22304/8546 পর্যবেক্ষণ করে যে এইচএফএস প্লাস সাধারণত সংবেদনশীল তবে কেস সংরক্ষণের ক্ষেত্রে কনফিগার করা থাকে ।
গ্রাহাম পেরিন

উত্তর:


16

এটি সম্ভব নাও হতে পারে:

Ls এর উত্স কোডটি একবার দেখে , ফাইলের নামগুলি বাছাই করতে এটি স্ট্রোকল ব্যবহার করে এবং তাই LC_COLLATE কে সম্মান করা উচিত।

কিছু অনলাইন পোস্টিং পরামর্শ দেয় যে বিএসডি (এবং ডারউইন / ওএস এক্স) এর লোকালগুলি লিনাক্সের তুলনায় কিছুটা ভাঙা হয়েছে। আমি আমার নিজের একটি দ্রুত বাছাই করার প্রোগ্রাম লিখেছিলাম যা স্পষ্টভাবে এটির স্থানীয় অবস্থান নির্ধারণ করেছে এবং আমার মেশিনে en_US.UTF-8 এবং C লোকেল (ম্যাক ওএস 10.6.3) এবং একটি বিশ্ববিদ্যালয় মেশিন (লিনাক্স, এফসি 11?) ব্যবহার করে এটি পরীক্ষা করেছে tested বাছাইয়ের সময় লিনাক্স মেশিনে প্রত্যাশার মতো কাজ করা হয় ("একটি বি সি" বনাম "বি এ সি"), ম্যাক সর্বদা তাদের "বি এ সি" হিসাবে বাছাই করে।

সূত্র: http://ask.metafilter.com/130292/CaseInsensitive-LS-on-Mac-OS-X

মূল উত্তর

এই কমান্ডটি ডট ফাইলগুলি বাছাই করে না, তবে অতিরিক্ত ডিরেক্টরি তালিকা প্রদর্শন করে

ls -f1 

আমি এর নিকটবর্তী হই:

.
..
.stuff
foo
Foobar
MyStuff
test.txt

1
আকর্ষণীয় যে -f বিকল্পের সাথে "অক্ষম করা सॉर्ट" আসলে এটি প্রত্যাশার মতো সাজিয়েছে বলে মনে হচ্ছে। আমি ধরে নিই যে এটি ফাইল সিস্টেম / এইচএফএস + আরও "প্রাকৃতিক" কোলেশন সহ এন্ট্রি বাছাই করে।
গেরি

6

আমি জানি এটির উত্তর দেওয়া হয়েছে তবে এটি আমার পক্ষে সেরা:

ls -f1 -alF -G

এটি সমস্ত বিবরণ তালিকাভুক্ত করে এবং কেস উপেক্ষা করে তাদের সাজায়।


4

এটি এখন কিছুক্ষণের জন্য আমাকে বাগিয়ে দিচ্ছে এবং অবশেষে আমি এটি সাজিয়েছি (হি)। কার্যকর হয়নি এমন একগুচ্ছ পরামর্শ দেওয়ার পরে, এখানে কী হয়েছে।

আপনি যদি ম্যাকপোর্টগুলি (বা হোমব্রিউ, বা ফিংক) ইনস্টল করতে ইচ্ছুক হন তবে ls এর GNU সংস্করণটি আপনি যা চান ঠিক তেমনটি করে। আমি ম্যাকপোর্টস নিজেই ব্যবহার করি, তাই এটাই আমি ব্যাখ্যা করব:

  1. ম্যাকপোর্টগুলি ডাউনলোড এবং ইনস্টল করুন:

    http://www.macports.org

  2. GNU Coreutils প্যাকেজ ইনস্টল করুন:

    sudo port install coreutils

  3. আপনি এখন গনুহ ম থাকতে হবে: gls। এটি একটি ডিরেক্টরিতে চেষ্টা করুন যাতে আইটেমগুলি থাকে যা বড় হাতের এবং ছোট হাতের অক্ষর উভয় দিয়েই শুরু হয়:

    gls -U

    ( -Uবিকল্পটি আসলে "অরসেটেড" এর অর্থ, তবে ওএস এক্সের ক্ষেত্রে এটি সংবেদনশীল হওয়ার ক্ষেত্রে কাঙ্ক্ষিত প্রভাব রয়েছে))

  4. আপনার এই উপনামটি যুক্ত করুন .bash_profileতাই নিয়মিত lsআপনি যেভাবে চান এটি কাজ করবে (আমি রঙিন আউটপুট পছন্দ করি তবে আপনি চাইলে বাদ দিতে পারেন; আপনার কেবল প্রয়োজন -U):

    alias ls='gls -U --color'

নোট করুন যে -Uবিকল্পটি সম্ভবত অন্যান্য প্ল্যাটফর্মগুলিতে কাজ করবে না। ওএস এক্স-তে সর্বদা সঠিক কাজটি করা বলে মনে হয় (সম্ভবত এইচএফএস + কার্যকরভাবে কেস-সংবেদনশীল - "কেস-সচেতন", প্রযুক্তিগতভাবে) তবে আপনি যদি লিনাক্স বাক্সে চেষ্টা করে দেখেন তবে ফলাফলগুলি সম্ভবত ঠিক হবে না একেবারে সাজানো


1
৩. নতুন এপিএফএসের কারণে ম্যাকোস> = 10.13 এর অধীনে আর পছন্দসই পার্শ্ব-প্রতিক্রিয়া (-U বিকল্প) বলে মনে হচ্ছে না।
মারিউস হাফার্ট

1
হ্যাঁ ... এপিএফএসের সাথে এটি করার কোনও উপায় নেই বলে মনে হচ্ছে না।
জেসন সিমস

নিশ্চিত করুন যদিও 10.12 এ কাজ করে। ধন্যবাদ!
কর্নেল আতঙ্ক

4

মাইकने উপরের লেখার সাথে যোগ করে, আমি এটিকে আরও খানিকটা এগিয়ে নিয়েছি এবং আপনার নিজের জোটের বিধি বিধানের জন্য একটি উপায় খুঁজে পেয়েছি।

স্থানীয় সংজ্ঞাগুলি / usr / শেয়ার / লোকেল / এ অবস্থিত। প্রতিটি ফোল্ডার একটি লোকেল এবং একটি ফাইল (বা একটি লিঙ্ক) রয়েছে এলসি_কোলেট, যা সংকেতগুলি "একই" হিসাবে চিহ্নিত করে (উদাহরণস্বরূপ, অর্ডার দেওয়ার সময় ইউ, ইউ এবং ü একই বিবেচনা করা উচিত)। আপনি একটি ডিরেক্টরি নকল করতে পারেন এবং এটি একটি নতুন স্থানীয় সংজ্ঞা তৈরি করবে:

$ sudo cp -R en_GB.UTF-8/ en_GB.UTF-8-CI/

এখন আপনার কাছে 'en_GB.UTF-8-CI' (কেস-সংবেদনশীলদের জন্য 'সিআই') নামে একটি নতুন লোকেল থাকবে এবং আপনি সেখান থেকে LC_COLLATE ব্যবহার করতে পারেন।

এখন, নতুন লোকালয়ে LC_COLLATE পরিবর্তন করতে আপনি http://www.opensource.apple.com/source/adv_cmds/adv_cmds-119/usr-share-locale.tproj/colldef/ থেকে লোকেল উত্স ডাউনলোড করতে পারেন , একটি সম্পাদনা করুন এটি আপনি চান এবং চালানোর সবচেয়ে নিকটতম

$ colldef < <new collation file>
$ sudo cp LC_COLLATE /usr/share/locale/en_GB.UTF-8-CI/

এবং এখন যখন আপনি চালান

$ LC_COLLATE=en_GB.UTF-8-CI ls

আপনার নিয়ম অনুসারে বাছাই করতে হবে ।

হ্যাঁ, এটি 'ls' কে বাছাইয়ের ক্ষেত্রে-সংবেদনশীল তৈরি করতে লাগে।


2

কার্যকারণ হিসাবে আপনি একটি ফাংশন এবং একটি উপনাম ব্যবহার করতে পারেন:

function lssorted() { /bin/ls "$@" | sort -f ;}
alias ls='lssorted'

এটি স্ট্যান্ডার্ড ls কমান্ডের জন্য একটি সংবেদনহীনভাবে সাজানো আউটপুট তৈরি করে।


1
আমার মনে রাখতে হবে: উদাহরণস্বরূপ -l ব্যবহার করা হলে এটি ব্যর্থ হবে। তারপরে ls শুরুতে আরেকটি লাইন তৈরি করে "মোট এক্স", যা বাছাই করা হবে।
আর্ন

2

ব্যবহার

ls -f

আমার জন্য কাজ কর.

-ফ যদি আনুষ্ঠানিকভাবে কোনও বাছাই বন্ধ করে দেয় তবে এটি দেখে মনে হচ্ছে আসল এইচএফএস সাজ্টের মাধ্যমে জ্বলজ্বল হয় যা হুবহু কেস-সংবেদনশীল সাজান।

আমার ধারণা, এটি আপনার উপর নির্ভর করে আপনার এইচডি ফর্ম্যাটেড কেস-সংবেদনশীল আছে কিনা তার উপর নির্ভর করে তবে ম্যাস ওএস এক্স সিস্টেম ডিস্কের ক্ষেত্রে কেস-সংবেদনশীল এইচএফএস ফর্ম্যাটটি ডিফল্ট হিসাবে এটি বেশিরভাগ ব্যবহারকারীর পক্ষে কাজ করা উচিত।


এটি অবশ্যই সঠিক উত্তর। এটির সাথে একমাত্র সমস্যাটি হ'ল এটি সুস্পষ্টভাবে একটি-অনও চালু করে, এবং এটি বন্ধ করার কোনও উপায় নেই, যা আপনাকে পিরিয়ড দিয়ে শুরু হওয়া ফাইল / ফোল্ডারগুলি দেখায়, এবং .. .
লেন্সভেট

1
অন্য সমস্যাটি (এখন) নতুন এপিএফএসের কারণে এটি ম্যাকওএস> = 10.13 এর অধীনে আর কাজ করবে বলে মনে হচ্ছে না।
মারিউস হাফার্ট

1

মাইকের উত্তরে অনুপ্রাণিত হয়ে আমি নিম্নলিখিতগুলিতে / ইত্যাদি / বাশার্কে যুক্ত করেছি এবং এটি মোজেভে সুন্দরভাবে কাজ করে। এটিতে লুকানো ফাইলগুলি তালিকাভুক্ত করা হয় যখন -এ যোগ করা হয় তবে এটি আমাকে বিরক্ত করে না।

export LC_COLLATE="cs_CZ.ISO8859-2"; alias ls='ls -lhFG'

লোকেল কমান্ডটি চালিয়ে আপনি নতুন কনফিগারেশনটি দেখতে পাবেন। প্রত্যাবর্তন করতে, কেবল / etc / bashrc থেকে লাইনটি সরিয়ে টার্মিনালে ফিরে আসুন।

$ locale
LANG="en_US.UTF-8"
LC_COLLATE="cs_CZ.ISO8859-2"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=

নোট করুন যে মোসাভেতে ls -f1 বা ls -f আমার পক্ষে কাজ করেনি। আমি সত্যিই একটি অচলিত তালিকা দিয়ে শেষ করেছি। আমি যে সমাধানটি দিয়েছি তা কেবল মোজেভে আমার জন্য কাজ করেছিল।


সেরা উত্তর, তবে প্রদত্ত উদাহরণটি খুব বেশি করে। এটি নীচে ছাঁটাই করা উচিত: নিম্নলিখিত লাইনটি আপনার .bashrcবা এর মধ্যে রাখুন .zshrc:alias ls="LC_COLLATE=cs_CZ.ISO8859-2 ls"
ব্যবহারকারী 1561489

0

চালান:

$ type ls

আপনি সম্ভবত দেখতে পাবেন যে আপনার lsকমান্ড প্রবণতাযুক্ত।


লিনাক্স: ls is /bin/ls। OS X এর অন: ls is hashed (/bin/ls)। যেভাবেই হোক, আমি /bin/lsসরাসরি কল করলেও এটি এখনও এলসি_কোলেট অনুসারে বাছাই করে না।

2
এটি আশ্চর্যের বিষয়, আমি বাজে যেতাম যে আপনার lsআদেশটি অন্তর্ভুক্ত করার জন্য প্রবণতাযুক্ত ছিল --group-directories-first। এটি এখনও অন্য কোনও জায়গায় করা হতে পারে, কেবল একটি উপনাম নয়।
মাইকিবি

0

আপনি যদি প্রধানত ডট ফাইলগুলির সাজানোর ক্রমের সাথে সংশ্লিষ্ট হন তবে আপনি এক্সটেনশন অনুসারে বাছাই করতে পারেন : বিকল্পটি সহ জিএনইউ ফাইল্টিলls থেকে কমান্ডটি ব্যবহার করুন । (আপনি ম্যাকপোর্টগুলির মাধ্যমে জিএনইউ ফাইল্টিলগুলি ইনস্টল করতে পারেন))--sort=extension


0

ls LC_COLLATE অনুসারে বাছাই করছে, কেবলমাত্র LC_COLLATE ফাইলের বেশিরভাগ ক্ষেত্রেই সংবেদনশীল বাছাই করতে সেট করা হয়। http://collation-charts.org/fbsd54/

দুটি কেস কে সংবেদনশীল বাছাইয়ের জন্য সেট করা হয়েছে: cs_CZ.ISO8859-2 এবং et_EE.ISO8859-15 et_EE.ISO8859.15 ইংরাজী স্পিকাররা যেভাবে চান তা "জেড" বাছাই করে না। বর্ণমালার সাথে cs.CZ.ISO8859-15 একটি ভাল কাজ করে, আমি কেবল বর্ণনামূলক অক্ষরের আগে এটি "~" বাছাই করতে চাই।

আমার সমাধানটি হ'ল: এলসি_সিএলএলটি = সিএস_সিজেড.আইএসও 8859-2 / বিন / এলএস-এফজি

আমি ভাবছি যদি কোনও কাস্টম LC_COLLATE ফাইল হ্যান্ডেল করা যায় "।" আপনি যেভাবে চান এবং "~" আমি যেভাবে চাই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.