اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

سه روش برای delete کردن تمامی فایل های یک دایرکتوری بجز فایل هایی با پسوند خاص

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    سه روش برای delete کردن تمامی فایل های یک دایرکتوری بجز فایل هایی با پسوند خاص

    گاهی در شرایطی قرار میگیرید که ممکن است بخواهید تمام فایل های یک دایرکتوری بجز فایل هایی با فرمت خاص (extension) را حذف نمایید. در این مقاله به شما نشان خواهیم داد که چگونه میتوان تمام فایل های یک دایرکتوری بجز فایل هایی با پسوند مشخص شده و یا فایل هایی با نوع خاص را با استفاده از دستورهای rm و find و همچنین globignore حذف کنید.

    قبل از انجام هر کاری، اجازه بدهید نگاه اجمالی به یک مفهوم مهم در لینوکس بپردازیم. تطابق الگوی نام فایل ها، که ما را قادر میسازد تا موضوع مورد نظر خود را به راحتی مدیریت کنیم.

    در لینوکس یک الگوی shell در حقیقت یک رشته است که شامل کاراکترهای خاص زیر میباشد که با عنوان wildcard یا metacharacter هم شناخته می شوند :
    کاراکتر * : هیچ یا هر تعداد کاراکتر
    کاراکتر ؟ : هر کاراکتر منفرد
    کاراکتر [seq] : هر کاراکتری از کاراکترهای داخل کروشه
    کاراکتر [!seq] : هر کاراکتری غیر از کاراکترهای موجود در داخل کروشه


    برای موضوع مورد بحث ما سه روش وجود دارد که در ادامه به بررسی آنها میپردازیم :


    پاک کردن فایل ها با استفاده از عملگرهای تطابق الگوی توسعه یافته (Extended Pattern Matching Operators)

    عملگرهای مختلف تطابق الگوی توسعه یافته به صورت زیر میباشند که pattern-list در حقیقت لیستی شامل نام یک یا چند فایل میباشد که با کاراکتر | از هم جدا میشوند :
    (pattern-list) * : مواردی با تعداد صفر یا بیشتر که با الگوهای مشخص شده مچ باشند.
    (pattern-list) ? : تعداد صفر یا یک مورد که با الگوهای مشخص شده مچ باشند.
    (pattern-list)+ : مواردی با تعداد یک یا بیشتر که با الگوهای مشخص شده مچ باشند.
    (pattern-list) @ : تنها یک مورد که با الگوهای مشخص شده مچ باشد.
    (pattern-list) ! : با هر چیزی غیر از یکی از الگوهای داده شده مچ باشد.


    برای استفاده از این عملگرها آپشن extglob در shell را با دستور زیر فعال نمایید :
    کد PHP:
    shopt -s extglob 

    1- برای حذف تمامی فایل های یک دایرکتوری بجز فایل با نام filename از دستور زیر استفاده نمایید:
    کد PHP:
    rm -!("filename"
    2- برای حذف کردن تمامی فایل ها بغیر از فایل با نام filename1 و filename2 از دستور زیر استفاده نمایید:
    کد PHP:
      rm -!("filename1"|"filename2"
    3- در مثال زیر تمامی فایل ها به غیر از فایل هایی با پسوند .zip را حذف میکنیم (دقت کنید قبل از حذف تاییدیه می خواهد که باید y را وارد کنیم) :
    کد PHP:
     rm -!(*.zip
    4- برای حذف کردن تمامی فایل های یک دایرکتوری به غیر از فایل هایی با پسوند .zip و .odt میتوانید از دستور زیر استفاده نمایید (که خروجی دستور هر آنچه اتفاق میافتد را نمایش خواهد داد):
    کد PHP:
    rm -!(*.zip|*.odt

    بعد از اجرای تمامی دستورات آپشن extglob شل را خاموش نمایید:
    کد PHP:
    shopt -u extglob 


    پاک کردن فایل ها با استفاده از دستور find در لینوکس

    در این روش میتوانیم از دستور find به تنهایی با آپشن های مناسب استفاده نماییم یا اینکه دستور find را با دستور xargs ترکیب نماییم. یعنی خروجی دستور find را به دستور xargs هدایت نماییم. فرمت دستورات بصورت زیر خواهند بود:
    کد PHP:
    find /directory/ -type f -not -name 'PATTERN' -delete 
    کد PHP:
    find /directory/ -type f -not -name 'PATTERN' -print0 xargs --{} rm {} 
    کد PHP:
    find /directory/ -type f -not -name 'PATTERN' -print0 xargs --{} rm [options] {} 

    5- دستور زیر تمامی فایل های غیر از فایل هایی با پسوند .gz را دایرکتوری جاری حذف میکند:
    کد PHP:
    find . -type f -not -name '*.gz'-delete 
    6- با استفاده ازیک pipeline (منظور علامت | میباشد) و xargs میتوان خروجی دستور find را به دستور xargs هدایت کرد و در حقیقت دستور فوق را به صورت زیر نیز اجرا نمود:
    کد PHP:
    find . -type f -not -name '*gz' -print0 xargs -0  -{} rm -{} 
    7- بیایید یک نمونه اضافی را هم بررسی نماییم. دستور زیر تمامی فایل های موجود در دایرکتوری جاری را به استثنای فایل هایی با پسوند .gz ، .odt و .gpg را از دایرکتوری جاری حذف خواهد نمود:
    کد PHP:
    find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete 


    پاک کردن فایل ها با استفاده از متغییر GLOBEIGNORE در bash

    روش سوم فقط در bash قابل انجام میباشد. در این روش متغییر GLOBEIGNORE شامل لیست الگوهایی (نام فایل) میباشد که با کولون از هم جدا میشوند تا توسط pathname expansion نادیده گرفته شوند.

    برای اینکه این روش را اجرا نمایید به دایرکتوری که میخواهید محتوای آن را خالی نمایید رفته و متغییر GLOBEIGNORE را بصورت زیر ست نماید:
    کد PHP:
    cd testGLOBIGNORE=*.odt:*.iso:*.txt 
    در این دستور تمامی فایل های موجود در دایرکتوری جاری به غیر از فایل هایی با پسوند .odt، .iso و .txt پاک خواهند شد.

    حالا دستور زیر را برای پاک کردن دایرکتوری اجرا نمایید:
    کد PHP:
    cd testGLOBIGNORE=*.odt:*.iso:*.txt 
    سپس متغییر GLOBEIGNORE را با دستور زیر غیر فعال (unset) نمایید:
    کد PHP:
    $ unset GLOBIGNORE 
    نکته : برای درک دستورات استفاده شده در مثال های فوق به صفحه راهنمای دستور مربوطه مراجعه نمایید.


    همچنین توصیه میشود مقالات زیر را هم مطالعه فرمایید :

    دستور find در لینوکس به همراه 35 مثال عملی

    دستور rm برای حذف همه فایل های یک دایرکتوری در لینوکس

    دستور rm -rf برای حذف فایل ها و دایرکتوری ها در لینوکس

    نحوه حذف کردن فایل های بزرگ (100 - 200 گیگابایت) در لینوکس

    چطور فایل های حذف شده را در Linux ریکاوری (Recovery) کنیم؟

    نحوه کلون/بک آپ گرفتن از سرورهای لینوکس با استفاده از ابزار Mondo Rescue Disaster Recovery



    این بود کل آموزش ما. اگر شما روش دیگری برای انجام این کار دارید ما را از نظرات خود بی بهره ننمایید. میتوانید در قسمت نظرات روش خود را ارسال نمایید.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-25-2021, 10:17 PM.

درباره انجمن منطقه لینوکسی ها

انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

شبکه های اجتماعی
در حال انجام ...
X