چگونه می توانم به صورت بازگشتی تمام پرونده های یک برنامه افزودنی خاص را در فهرست فعلی حذف کنم؟


به جواب پذیرفته شده بروید




چگونه می توانم با اطمینان تمام فایلها را با یک پسوند خاص (به عنوان مثال .bak ) از فهرست فعلی و همه زیر پوشه ها با استفاده از یک خط فرمان حذف کنم؟ به سادگی ، من می ترسم از استفاده rm از وقتی که من آن را اشتباه استفاده کردم و اکنون به مشاوره نیاز دارم.


551









8 :تعداد پاسخها


rm در صورت ترس حتی نیازی به استفاده در این حالت ندارید. استفاده find :

 find . -name "*.bak" -type f -delete
 

اما با احتیاط از آن استفاده کنید. اجرای اول:

 find . -name "*.bak" -type f
 

تا دقیقاً ببینید کدام پرونده ها را حذف می کنید.

همچنین ، مطمئن شوید که -delete آخرین استدلال در فرمان شما است. اگر شما آن را قبل از -name *.bak argument ، از آن خواهد همه چیز را حذف .

مشاهده man find و man rm برای اطلاعات بیشتر و همچنین این سوال مرتبط با SE را ببینید:


870



 find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f
 

41



ابتدا دستور را اجرا کنید shopt -s globstar . شما می توانید آن را در خط فرمان اجرا کنید ، و فقط در آن پنجره پوسته اثر خواهد داشت. می توانید آن را درون خود قرار دهید .bashrc ، و سپس تمام پوسته های تازه شروع شده ، آن را انتخاب می کنند. تأثیر آن دستور تهیه **/ فایل های مطابقت در دایرکتوری فعلی و زیرشاخه های آن به صورت بازگشتی است (به طور پیش فرض ، **/ به معنای همان مواردی است که */ : فقط در زیر شاخه های فوری). سپس:

 rm **/*.bak
 

(یا gvfs-trash **/*.bak شما چه دارید)


35



حذف پرونده ها برای من چیزی نیست که شما باید از آن استفاده کنید rm . در اینجا گزینه دیگری وجود دارد:

 sudo apt-get install gvfs     # install a tool that allows you to put stuff in the trash
alias "trash"="gvfs-trash"    # you can also put this in .bash_aliases or simply use the command without alias
trash *.bak                   # trash the files (thus moving them to the trash bin)
 

همانطور که فلیم در اظهارات اظهار می دارد:

بسته بندی trash-cli همان کار را gvfs-trash بدون وابستگی به gvfs انجام می دهد.

بنابراین:

 sudo apt-get install trash-cli
 

شما نیازی به ایجاد نام مستعار برای این کار ندارید ، زیرا این trash-cli بسته یک فرمان را ارائه می دهد trash ، همان کاری که ما می خواهیم.

همانطور که الیا کاگان در اظهارنظرهای گسترده روشن می کند ، می توانید با استفاده از آن نیز بازگشتی را انجام دهید find . در این حالت شما نمی توانید از یک نام مستعار استفاده کنید ، بنابراین فرامین زیر فرض می کنید که نصب کرده اید trash-cli . من نظرات الیا را خلاصه می کنم:

این دستور همه .bak پرونده ها و سمبل ها را در هر نقطه از فهرست فعلی یا زیرمجموعه های آن یا در زیر پیدا کرده و نمایش می دهد .

 find . -name '*.bak' -xtype f
 

برای حذف آنها، اضافه کردن یک -exec با trash دستور:

 find . -name '*.bak' -xtype f -exec trash {} +
 

-xtype f پرونده ها و پیوندها را به پرونده ها انتخاب می کنید ، اما نه پوشه ها. برای حذف پوشه های .bak نیز ، آن قسمت را حذف کرده و از -execdir آن استفاده کنید ، که از cannot trash non-existent خطا در .bak پرونده های داخل .bak فهرست ها جلوگیری می کند :

 find . -name '*.bak' -execdir trash {} +
 

22



اگر می خواهید تمام پرونده های نوع خاصی حذف شود ، اما فقط 1 پوشه "عمیق" از پوشه فعلی وجود دارد:

 find . -maxdepth 2 -name "*.log" -type f -delete
 

-maxdepth 2 دلیل دایرکتوری جاری " . " شمارش به عنوان اولین پوشه.


5



جواب سریع:

  • همه پرونده ها را با نام در نظر گرفته شده یا پس از پیوند به صورت بازگشتی حذف کنید:

    find . -name '*.pyc' -type f -delete

  • همه دایرکتوری ها را با نام در نظر گرفته شده به صورت بازگشتی حذف کنید:

     find ~ -path '*/__pycache__/*' -delete‍‍‍
    find ~ -type d -name '__pycache__' -empty -delete‍‍‍
     

    بعضی از موارد بسیار کم کنترل ، اما در یک خط واحد:

     find ~ -path '*/__pycache__*' -delete
     

[ توجه ]:

d گزینه دایرکتوری است و f گزینه پرونده است.


1



اگر داخل یک repo git هستید ، می توانید از موارد زیر استفاده کنید:

 git clean -fdx
 

این پرونده ها و پرونده های غیرقابل حل را در .gitignore حذف می کند.


0



اگر می خواهید قبل از حذف پرونده ها ، لیست را بررسی کنید ، می توانید آن را تکرار کنید.

 find . -name "*.bak" -type f | xargs echo rm -rf
 

با این کار نتایج جستجو که از طریق xargs به فرمان rm داده می شوند ، لیست می شود. پس از اطمینان از لیست می توانید echo را در دستور بالا رها کنید.

 find . -name "*.bak" -type f | xargs rm -rf
 

0



انتشارات مرتبط


چگونه می توانم تمام نسخه های یک بسته موجود در بایگانی را ببینم؟

چرا باید قبل از اجرای برنامه در فهرست فعلی ، نوع `. /` را تایپ کنم؟

چگونه می توانم با استفاده از ترمینال کلیه پرونده ها را از فهرست اصلی حذف کنم؟ [تکثیر]

چگونه می توانم پرونده های شماره گذاری شده را در یک محدوده مشخص حذف کنم؟

چرا باید قبل از اجرای برنامه در فهرست فعلی ، نوع `. /` را تایپ کنم؟

چگونه می توانم تمام پرونده هایی را که با "b" یا "B" از / bin در یک پوشه خاص شروع می شود کپی کنم؟

چگونه می توانم انواع فایل های موجود در یک فهرست را نشان دهم؟

چگونه می توانم تمام قسمت درایو قلم خود را پاک کنم و یک جلد واحد ایجاد کنم؟

همه پرونده ها را با پسوندهای خاص gzip کنید

چگونه می توان وقایع یک اصطلاح را در کلیه پرونده های فهرست موجود مشاهده کرد؟

[command-line] سوال برچسب


دستور تعیین IP عمومی من؟

نصب درایورهای بی سیم Broadcom

سوسو زدن آزار دهنده در 16.04 LTS - Chrome

چگونه می توان زمان اجرای یک فرایند ترمینال را اندازه گیری کرد؟

چگونه می توانم ببینم چه درگاههایی روی دستگاه من باز است؟

آیا راهی برای بازگرداندن ویژگی صفحه نمایش تقسیم (F3) Nautilus وجود دارد؟

هسته "قدیمی" را به عنوان ورودی grub پیش فرض تنظیم کنید

چگونه می توانم بررسی کنم که به روزرسانی های خودکار فعال هستند؟

منوی برنامه از نوار فهرست موجود نیست

آیا فرمت کردن درایو خارجی به ext4 توصیه می شود؟