سؤال

أحتاج إلى إدراج جميع الملفات التي تبدأ أسماؤها بـ "SomeLongString".لكن حالة "SomeLongString" يمكن أن تختلف.كيف؟

أنا أستخدم zsh، لكن حل bash مرحب به أيضًا.

هل كانت مفيدة؟

المحلول

زش:

$ unsetopt CASE_GLOB

أو، إذا كنت لا ترغب في تمكين اللمعان غير الحساس لحالة الأحرف بشكل عام، فيمكنك تنشيطه للجزء المتغير فقط:

$ print -l (#i)(somelongstring)*

سيطابق هذا أي ملف يبدأ بـ "somelongstring" (في أي مجموعة من الأحرف الصغيرة/الكبيرة).تنطبق العلامة غير الحساسة لحالة الأحرف على كل شيء بين الأقواس ويمكن استخدامها عدة مرات.اقرأ الدليل zshexpn(1) للمزيد من المعلومات.

تحديثلقد نسيت تقريبًا، يجب عليك تمكين Extendend globbing حتى يعمل هذا:

setopt extendedglob

نصائح أخرى

وباش:

shopt -s nocaseglob

واعتمادا على مدى عمق كنت تريد أن يكون هذه القائمة، find تقدم الكثير جدا في هذا الصدد:

find . -iname 'SomeLongString*' -maxdepth 1

وهذا سوف تعطيك فقط الملفات في الدليل الحالي. المهم هنا هو المعلمة -iname بدلا من -name.


$ function i () {
> shopt -s nocaseglob; $*; shopt -u nocaseglob
> }
$ ls *jtweet*
ls: cannot access *jtweet*: No such file or directory
$ i ls *jtweet*
JTweet.pm  JTweet.pm~  JTweet2.pm  JTweet2.pm~
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top