Glob غير حساس لحالة الأحرف على zsh/bash
سؤال
أحتاج إلى إدراج جميع الملفات التي تبدأ أسماؤها بـ "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~