امیرحسین نقی نژاد
امیرحسین نقی نژاد
خواندن ۲ دقیقه·۲ سال پیش

فیلتر کردن نام فایل‌ها در لینوکس (Globbing)

برای فیلتر کردن نام فایل‌ها باید در ابتدا با الگوهای wildcard آشنا باشیم.

این الگوها از کاراکترهای خاصی ساخته شده‌اند که در لینوکس معانی مختلفی دارند . پرکاربرد ترین این الگوها عبارتند از :

  • * : قابلیت match شدن با هر چند کاراکتر را دارد.
$ ls -l *.conf

مثال بالا لیست تمام فایل‌هایی که در انتها به .conf ختم میشوند و در دایرکتوری فعلی شما قرار دارند را برمیگرداند.

  • ? : قابلیت match شدن فقط با یک کاراکتر را دارد.
$ ls -l *.???

مثال بالا لیست تمام فایل‌هایی که در انتها یک نقطه و سپس سه کاراکتر دارند را برمیگرداند.

  • [ ] : قابلیت قرار گرفتن مجموعه‌ای از کاراکترها برای match شدن را دارد.
$ ls -l file[2-4]
$ ls -l file.[a-z]?

مثال اول فایل‌هایی با نام file4 ، file3 ، file2 و مثال دوم فایل‌هایی مانند file.a1 یا file.ab را شامل و درصورت وجود برمیگرداند.

  • { } : قابلیت قرار گرفتن چند filename متفاوت برای match شدن را دارد.
$ ls -l {[a-f]*,*.conf,*.???}

همانطور که در مثال بالا مشخص است پترن‌های مختلف را با ( , ) جدا میکنیم ، باید توجه داشته باشیم نتیجه این دستور اشتراک پترن‌ها میباشد. یعنی همه فایل‌هایی که با a تا f شروع میشوند به همراه همه فایل‌هایی که پسوند conf دارند به همراه همه فایل‌هایی که پسوند سه حرفی دارند را نمایش میدهد.


ما در این آموزش فقط از دستور ls که برای لیست کردن فایل‌ها است استفاده کردیم ، شما میتوانید از ترکیب دستورات مختلف و پترن‌ها استفاده کنید . برای مثال دستور زیر تمام فایل‌ها با پسوند txt را از دایرکتوری Downloads به Documents مناقل میکند.

mv *.txt ~/Downloads/ ~/Documents/


تفاوت Glob و Regex


اگر با ( Regular Expression ) آشنا باشید حتما متوجه شباهت Glob و Regex شده‌اید.

الگوهای Regex و Glob روش‌های مشابهی برای تطبیق الگوها در رشته‌ها هستند. تنها تفاوت در این است که الگوی Regex با رشته‌ها در کد ، متن و ... مطابقت پیدا میکند، در حالی که Globbing با نام فایل یا محتوای فایل در ترمینال مطابقت دارد.

linuxregex
برنامه نویس لاراول
شاید از این پست‌ها خوشتان بیاید