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

حذف فایل در فولدرهای مختلف از طریق find و regex

مقدمه، پیشگفتار، چکیده، چی چی میخوام بگم، از کجا شروع کنم!!!

بعضا برای همه ما اتفاق میوفته بخواهیم فایلهایی رو با مشخصه خاص و مشترکی اعم پسوند و نام مشخص پیدا و یا حذف کنیم. خیلی سرتون رو درد نیارم. مخلص کلام آقا ما روی ی سرور لینوکسی قصد پاک کردن ی سری فایل بکاپ دیتابیس داشتم. (اوه وایسا وایسا، مگه فایل بکاپ اون هم دیتابیس رو هم پاک میکنند آخه. آره جوووووون دل!!! اگه تستی بوده باشه و یا بخوایم قدیمیا رو پاک کنیم آره)

چالش، چاله، چاه (صرف کردن چال)

نگم براتون که چالش رو تو همون از کجا شروع کنم گفتم براتون. این هم نوشتم برای خالی نبودن عریضه

فرض کنید ی ساختاری شبیه تصویر (سرویس جذاب asciinema) دارید و میخواید فایلهایی که تاریخ درست درمونی ندارند (که از بابت تست bash script ایجاد شده) حذف بشه.

دیگه ببخشید دیگه نشد که بشه embed طوری توی ویرگول بذارم. گیف طوری نشون دادم
دیگه ببخشید دیگه نشد که بشه embed طوری توی ویرگول بذارم. گیف طوری نشون دادم

قصدم پاک کردن بکاپ های تستی بود که در این جا فایلهای backup-10.sql.gz و backup-11.sql.gz می‌باشد (نقطه سر خط)

عمق فاجعه
عمق فاجعه

چی کارا کردم تا رسیدم به نتیجه

تیتر وار بگم:

  1. گشتم، گشتی، گشت (صرف فعل گشت در باب گوگل)
  2. گشتم
  3. به خودم گفتم گشتم نبود نگرد نیست
  4. مورد ۳ رو بی خیال شدم دوباره گشتیدم
  5. رسیدن به این که با کامند find میشه ی حرکتهایی زد
  6. خوندن manual کامند find
  7. گشتم
  8. به خودم گفتم گشتم نبود نگرد نیست
  9. دوباره صرف فعل گشت
  10. همی یافتمی

چی شد!!!

چی چی شد!!!

یافتم دیگه. اول فقط تست کوچیک بابت اینکه بتونم الگوی خاصی برای نوشتن regex پیدا کنم:

find . -type f

دوم تست regex: (البت‍ه با توجه به بخش چی کارا کردم تا رسیدم به نتیجه خیلی طول کشید تا برسم به نتیجه)

find . -type f -regex '.*/*[1][10].sql.gz'

و در نهایت تیر خِلاص:

find . -type f -regex '.*/*[1][10].sql.gz' -delete‍


و باز هم سرویس جذاب asciinema کمک کرد که نشون بدم چیکارا کردم. کاملش رو اینجا ببینید:

https://asciinema.org/a/XHQewmUGP2j1kNvL6BoIe5e4x

نتیجه‌گیری اخلاقی !!!‍

نتیجه گرایی ؟؟؟ اومدیمو این چالش به شکست منجر میشد اون وقت چی!!!
پس نتیجه گرا نباشیم. هر شکستی پلی است به سوی پیروزی (الکی ادای حال بدا رو درنیار عزیزززززز!!!)
فقط نکاتی از این چالش یاد گرفتم این بود که:

  1. اول بدون آرگومان delete- اقدام به یافتن و تست regex میکنیم
  2. هیچ وقت دست از کوشش برنمیداریم. (چی کو!!!، آها همان سعی و تلاش. به نظرم هی باید به خودت بگی کو کو کوشش تا پیداش کنی‍)
لینوکسfindregex
شاید از این پست‌ها خوشتان بیاید