Linux terminalida fayllar va kataloglarni qanday o'chirish mumkin? RMDIR (RD) buyrug'i – Windows fayl tizimi katalogini o'chirish Linuxda jildni konsoldan o'chirish


rm va rmdir buyruqlari Linux, macOS va boshqa Unix-ga o'xshash operatsion tizimlardagi fayllar va kataloglarni o'chiradi. Ular Windows va DOS da del va deltree buyruqlariga o'xshaydi. Ushbu buyruqlar juda kuchli va bir nechta variantga ega.

Shuni ta'kidlash kerakki, rm va rmdir yordamida o'chirilgan fayllar va kataloglar axlat qutisiga o'tkazilmaydi. Ular darhol kompyuteringizdan o'chiriladi. Agar siz ushbu buyruqlar yordamida fayllarni tasodifan o'chirib tashlagan bo'lsangiz, ularni faqat zaxira nusxasidan tiklashingiz mumkin bo'ladi.

Rm yordamida fayllarni qanday o'chirish mumkin

Eng oddiy holat joriy katalogdagi bitta faylni o'chirishdir. rm buyrug'ini, bo'sh joyni va keyin o'chirmoqchi bo'lgan fayl nomini kiriting.

Rm file_1.txt

Agar fayl joriy ishchi katalogda bo'lmasa, fayl joylashgan joyga yo'lni ko'rsating.

Rm ./path/to/the/file/file_1.txt

rm ga bir nechta fayl nomini o'tkazishingiz mumkin. Bu barcha belgilangan fayllarni o'chiradi.

Rm file_2.txt file_3.txt

Joker belgilar o'chiriladigan fayllar guruhlarini tanlash uchun ishlatilishi mumkin. Imzo * bir nechta belgilarni va belgini ifodalaydi ? bir belgini ifodalaydi. Ushbu buyruq joriy ishchi katalogdagi barcha png tasvir fayllarini o'chiradi.

Rm * .png

Ushbu buyruq bir xil belgilar kengaytmasiga ega barcha fayllarni o'chiradi. Masalan, bu File.1 va File.2 ni o'chiradi, lekin File.12 emas.

Rm *.?

Agar fayl yozishdan himoyalangan bo'lsa, sizdan faylni o'chirish so'raladi. bilan javob berishingiz kerak y yoki n va "Enter" tugmasini bosing.

Joker belgilar bilan rm dan foydalanish xavfini kamaytirish uchun opsiyadan foydalaning -i(interaktiv). Buning uchun har bir faylni o'chirishni tasdiqlashingiz kerak.

Rm -i * .dat

Variant -f(kuch) interaktivga qarama-qarshidir. Fayllar yozishdan himoyalangan bo'lsa ham, u tasdiqlashni so'ramaydi.

Rm -f fayl nomi

Rm yordamida kataloglarni qanday olib tashlash mumkin

Bo'sh katalogni o'chirish uchun opsiyadan foydalaning -d(katalog). Siz fayl nomlarida bo'lgani kabi katalog nomlarida ham joker belgilardan (* va ?) foydalanishingiz mumkin.

Rm -d katalogi

Bir nechta katalog nomini taqdim etish barcha belgilangan bo'sh kataloglarni olib tashlaydi.

Rm -d katalog1 katalogi2 /yo'l/to/katalog3

Bo'sh bo'lmagan kataloglarni o'chirish uchun opsiyadan foydalaning -r(rekursiv). Aniq bo'lishi uchun, bu kataloglar va ulardagi barcha fayllar va pastki kataloglarni o'chiradi.

Rm -r katalog1 katalog2 katalog3

Agar katalog yoki fayl yozishdan himoyalangan bo'lsa, sizdan o'chirishni tasdiqlash so'raladi. Bo'sh bo'lmagan kataloglarni olib tashlash va bu so'rovlarni bostirish uchun variantlardan birgalikda foydalaning -r(rekursiv) va -f(majburiy).

Rm -rf katalogi

Bu erda ehtiyotkorlik talab qilinadi. Buyruq xatosi rm -rf ma'lumotlar yo'qolishi yoki tizimning noto'g'ri ishlashiga olib kelishi mumkin. Bu xavfli va ehtiyotkorlik eng yaxshi siyosatdir. rm -rf tomonidan o'chiriladigan katalog tuzilishi va fayllar haqida tasavvurga ega bo'lish uchun daraxt buyrug'idan foydalaning.

Agar siz Ubuntu yoki boshqa Debian-ga asoslangan distributordan foydalanayotgan bo'lsangiz, ushbu paketni tizimingizga o'rnatish uchun apt-get-dan foydalaning. Boshqa Linux distributivlarida Linux tarqatish paketlarini boshqarish vositasidan foydalaning.

Sudo apt-get o'rnatish daraxti

Daraxt buyrug'ini ishga tushirish katalog tuzilishi va u ishga tushiriladigan katalog ostidagi fayllarning tushunarli diagrammasini yaratadi.

Shuningdek, daraxt buyrug'iga yo'lni belgilashingiz mumkin, shunda u daraxtni fayl tizimidagi boshqa katalogdan ishga tushiradi.

Daraxt yo'li/katalogi

rm buyrug'ida --one-file-system , --no-preserve-root , --preserve-root opsiyalari ham mavjud, ammo ular faqat ilg'or foydalanuvchilar uchun tavsiya etiladi. Agar siz noto'g'ri ish qilsangiz, barcha tizim fayllaringizni tasodifan o'chirib tashlashingiz mumkin.

Rmdir yordamida kataloglarni qanday olib tashlash mumkin

Kataloglarni o'chirish uchun foydalanishingiz mumkin bo'lgan yana bir buyruq, rmdir mavjud. Rm va rmdir o'rtasidagi farq shundaki, rmdir faqat bo'sh kataloglarni o'chira oladi. U hech qachon fayllarni o'chirmaydi.

Eng oddiy holat bitta bo'sh katalogni o'chirishdir. rm da bo'lgani kabi, bir nechta katalog nomini rmdir yoki rmdir katalog yo'liga o'tkazishingiz mumkin.

Joriy katalogdagi bitta katalogni uning nomini rmdirga o'tkazish orqali olib tashlang:

Rmdir katalogi

rmdir-ga nomlar ro'yxatini o'tkazish orqali bir nechta kataloglarni olib tashlang:

Rmdir katalogi1 katalog2 katalog3

Joriy katalogda bo'lmagan katalogni ushbu katalogga to'liq yo'lni ko'rsatib o'chiring:

Rmdir /path/to/katalog

Agar siz bo'sh bo'lmagan jildni o'chirishga harakat qilsangiz, rmdir sizga xato xabari beradi. Quyidagi misolda, rmdir mijozlar katalogini muvaffaqiyatli va jimgina o'chiradi, lekin loyihalar katalogini o'chirishni rad etadi, chunki unda fayllar mavjud. Loyihalar katalogi avvalgidek qoladi va undagi fayllarga tegilmaydi.

Rmdir "Katalog bo'sh emas" xatosini chiqarsa, buyruq satrida unga uzatilgan kataloglarni qayta ishlashni to'xtatadi. Agar siz to'rtta katalogni va birinchisida joylashgan fayllarni o'chirishni so'rasangiz, rmdir sizga xato xabari beradi va boshqa hech narsa qilmaydi. Siz uni boshqa kataloglarni qayta ishlash uchun --ignore-fail-on-non-empty yordamida ushbu xatolarga e'tibor bermaslikka majburlashingiz mumkin.

Quyidagi misolda ikkita papka rmdir-ga o'tkazildi, ular ish/hisobotlar va ish/iqtiboslardir. Buyruqda --ignore-fail-on-empty varianti kiritilgan. Ish/hisobotlar papkasida fayllar mavjud, shuning uchun rmdir uni o'chira olmaydi. --ignore-fail-on-non-empty opsiyasi rmdir-ning xatoni e'tiborsiz qoldirishiga va u qayta ishlanishi kerak bo'lgan keyingi papkaga, ya'ni ish/tirnoqlarga o'tishiga olib keladi. Bu bo'sh papka va rmdir uni o'chiradi.

Bu buyruq ishlatilgan.

Rmdir --bo'sh bo'lmagan ish/hisobotlar/ish/iqtiboslarni e'tiborsiz qoldirish

Variantdan foydalanishingiz mumkin -p(ota-ona) katalogni olib tashlash va uning asosiy kataloglarini ham olib tashlash. Bu hiyla ishlaydi, chunki rmdir maqsadli katalogdan boshlanadi va keyin ota-onaga qaytadi. Ushbu katalog endi bo'sh bo'lishi kerak, shuning uchun uni rmdir tomonidan o'chirish mumkin va jarayon rmdir tomonidan taqdim etilgan yo'l bo'ylab orqaga qadamni takrorlaydi.

Quyidagi misolda rmdir ga berilgan buyruq:

Rmdir -p ish/fakturalar

Hisob-fakturalar va ish kataloglari so'rov bo'yicha o'chiriladi.

Bash yoki boshqa qobiqdan foydalanasizmi? Linux to'g'ridan-to'g'ri terminal buyruq satridan katalog va fayllarni o'chirish uchun moslashuvchan va kuchli buyruqlar beradi. Ba'zi odamlar terminal atrofida aylanadigan ish oqimiga ega bo'lishni afzal ko'rishadi. Boshqalar bu masalada tanlovga ega bo'lmasligi mumkin. Ular GUI o'rnatilmagan serverlarda yoki Raspberry Pi kabi mustaqil tizimda masofaviy seansda ishlashi mumkin. Ushbu jamoalar ushbu guruh odamlari uchun juda mos keladi.

Lekin qaysi turdagi ish jarayonini afzal ko'rsangiz ham, bu buyruqlar qobiq skriptlariga qo'shilish uchun juda yaxshi yordam beradi. Agar skript cron ishi tomonidan boshqarilsa, u keraksiz jurnal fayllarini tozalash kabi muntazam uy ishlarini avtomatlashtirishga yordam beradi. Agar siz ushbu foydalanish holatini o'rganayotgan bo'lsangiz, ushbu buyruqlarning kuchidan xabardor bo'ling, hamma narsani yaxshilab tekshirib ko'ring va har doim oxirgi zaxira nusxasini saqlang.

Buyruqlar qatori Windows operatsion tizimida ishlaydigan kompyuterni boshqarishda yuzaga keladigan ko'plab vazifalarni avtomatlashtirish va soddalashtirish uchun kuchli vositadir. Ushbu maqolada biz DEL, ERASE, RD va RMDIR buyruqlarini ko'rib chiqamiz. Ularning yordami bilan siz fayl va papkalarni to'g'ridan-to'g'ri buyruq satridan o'chirishingiz mumkin.

Agar faylni orqali o'chirishingiz kerak bo'lsa, DEL yoki ERASE buyrug'idan foydalanishingiz kerak. Bu buyruqlar sinonimdir va bir xil ishlaydi. Ushbu buyruqlar haqida batafsil ma'lumotni buyruq satriga "/? " Masalan, "del/? " va del buyrug'i haqidagi barcha asosiy ma'lumotlar konsolda ko'rsatiladi.

DEL (yoki ERASE) buyrug'i bir yoki bir nechta fayllarni o'chirish uchun mo'ljallangan va quyidagi parametrlarni qabul qilishi mumkin:

  • /P - har bir fayl uchun tasdiqlash so'rovi bilan o'chirish;
  • / F - "faqat o'qish" atributiga ega fayllarni o'chirish;
  • /S - belgilangan faylni barcha pastki papkalardan o'chiradi;
  • /Q - tasdiqlash so'rovisiz o'chirish;
  • /A – fayllarni atributlariga ko‘ra o‘chirish;

    • S - tizim;
    • H - yashirin;
    • R - faqat o'qish;
    • A - arxivlash uchun
    • Bundan tashqari, atributlar oldida "EM" degan ma'noni anglatuvchi "-" minus belgisidan foydalanishingiz mumkin. Masalan, "-S" tizimi bo'lmagan faylni anglatadi.

Odatda, DEL buyrug'ini ishlatish uchun avval o'chiriladigan fayl joylashgan papkaga o'tishingiz va keyin buyruqni bajarishingiz kerak. Drayvni o'zgartirish uchun haydovchi harfini va ikki nuqtani kiritish kifoya. Va papkalar bo'ylab harakatlanish uchun siz "CD" buyrug'idan foydalanishingiz kerak.

Kerakli papkaga kirganingizdan so'ng, fayllarni o'chirishni boshlashingiz mumkin. Buning uchun DEL buyrug'ini va fayl nomini kiritish kifoya.

Bundan tashqari, agar kerak bo'lsa, siz papkalar bo'ylab harakat qilmasdan fayllarni o'chirishingiz mumkin. Bunday holda, siz hujjatning to'liq yo'lini ko'rsatishingiz kerak.

Agar ularning har bir faylini o'chirishni tasdiqlash uchun so'rovni bajarish zarurati tug'ilsa, DEL buyrug'iga "/p" parametri qo'shilishi kerak. Bunday holda, buyruq qatori faylni o'chirishni taklif qiladi va foydalanuvchi tasdiqlash uchun "Y" harfini kiritishi kerak bo'ladi.

Shuni ta'kidlash kerakki, "/a" parametridan foydalanilganda, atributlar uchun mas'ul bo'lgan harflar ikki nuqta bilan ajratilgan holda kiritilishi kerak. Masalan, "faqat o'qish" atributli va "txt" kengaytmali barcha fayllarni o'chirish uchun siz " buyrug'ini kiritishingiz kerak. del /F /A:R *.txt ".

Xuddi shunday tarzda DEL buyrug'iga boshqa parametrlarni qo'shishingiz mumkin. Ularni birlashtirib, siz Windows buyruq satri orqali fayllarni o'chirish uchun juda kuchli buyruqlar yaratishingiz mumkin. Quyida biz yana bir nechta misollarni keltiramiz:

  • del D:\ - D diskining ildizidagi barcha fayllarni yo'q qiladi;
  • del D:\*.txt – D diskining ildizidagi txt kengaytmali barcha fayllarni yo'q qilish;
  • del D:\doc – d:\doc jildidagi barcha fayllarni yo‘q qilish (atributlari bo‘lgan hujjatlar o‘tkazib yuboriladi);
  • del /A:r d:\doc\*.txt – d:\doc jildidagi “faqat o‘qish” atributi va “txt” kengaytmali barcha fayllarni yo‘q qilish;

Buyruqlar satri orqali papkalarni o'chirish

Agar siz Windows buyruq satri orqali jildni o'chirishingiz kerak bo'lsa, yuqoridagi buyruqlar sizga yordam bermaydi. Jildlarni o'chirish uchun alohida RD yoki RMDIR buyrug'i mavjud (Katalogni o'chirish uchun qisqartma).

RD va RMDIR buyruqlari sinonimdir va papkalarni o'chirish uchun mo'ljallangan. Ular quyidagi parametrlarni qabul qilishlari mumkin:

  • /S - butun katalog daraxtini o'chiradi, bu parametrdan foydalanganda nafaqat jildning o'zi, balki uning barcha tarkibi ham o'chiriladi;
  • /Q – papkalar daraxtini tasdiqlashni so‘ramasdan o‘chirish;

Masalan, jildni o'chirish uchun RD buyrug'ini va jild nomini kiritish kifoya.

Agar jildda pastki papkalar yoki fayllar bo'lsa, uni o'chirishda xatolik ko'rsatiladi."

Ushbu muammoni hal qilish uchun RD buyrug'iga "/ s" parametrini qo'shishingiz kerak. Bunday holda, o'chirish muammosiz davom etadi, ammo o'chirishni tasdiqlash so'rovi paydo bo'ladi.

Tasdiqlash so'rovi ko'rinmasdan papka daraxti o'chirilishi uchun buyruqqa "/ q" parametrini qo'shishingiz kerak. Bunday holda, jild hech qanday savollarsiz o'chiriladi.

Bundan tashqari, RD buyrug'i bir vaqtning o'zida bir nechta papkalarni qabul qilishi mumkin, buning uchun ularni bo'sh joy bilan ajratish kifoya. Misol uchun, agar siz "rd 111 222" ni bajarsangiz, "111" va "222" nomli papkalarni bir vaqtning o'zida o'chirishingiz mumkin.

Agar siz papkani buyruq qatori orqali o'chirishingiz kerak bo'lsa, unda bo'sh joy mavjud bo'lsa, unda bu holda uning nomi qo'sh tirnoq ichiga olinishi kerak.

DEL va RD buyruqlarini birlashtirib, siz Windows operatsion tizimidagi papkalarni tozalash va o'chirish uchun kuchli skriptlarni yaratishingiz mumkin.

Linux yadrosiga asoslangan operatsion tizimlar odatda juda ko'p bo'sh va bo'sh bo'lmagan kataloglarni saqlaydi. Ulardan ba'zilari juda katta hajmdagi saqlash joyini egallaydi va ko'pincha keraksiz bo'lib qoladi. Bunday holda, to'g'ri variant ularni olib tashlash bo'ladi. Tozalashning bir necha usullari mavjud, ularning har biri muayyan vaziyatda qo'llaniladi. Keling, barcha mavjud usullarni batafsil ko'rib chiqaylik va siz o'zingizning ehtiyojlaringizdan kelib chiqqan holda eng mosini tanlaysiz.

Ushbu maqolada biz buyruqlar kiritish orqali ishga tushiriladigan konsol yordam dasturlari va qo'shimcha vositalar haqida gapiramiz. Biroq, grafik qobiqlar ko'pincha tarqatishda qo'llanilishini unutmang. Shunga ko'ra, katalogni o'chirish uchun siz shunchaki fayl menejeri orqali unga o'tishingiz kerak, belgini o'ng tugmasini bosing va tanlang "O'chirish". Shundan so'ng axlat qutingizni bo'shatishni unutmang. Biroq, bu parametr barcha foydalanuvchilar uchun qo'llanilmaydi, shuning uchun quyidagi qo'llanmalarni o'qib chiqishingizni tavsiya qilamiz.

Usullarni ko'rib chiqishni boshlashdan oldin shuni ta'kidlash kerakki, buyruqni kiritishda siz ko'pincha o'chirmoqchi bo'lgan papkaning nomini mustaqil ravishda ko'rsatasiz. Agar siz uning joylashgan joyida bo'lmasangiz, to'liq yo'lni taqdim etishingiz kerak. Iloji bo'lsa, ob'ektning asosiy katalogini topib, konsol orqali unga o'tishni tavsiya qilamiz. Ushbu harakat bir necha daqiqada yakunlanadi:


Agar siz manzilni aniqlay olmasangiz, o'chirishda siz to'liq yo'lni o'zingiz kiritishingiz kerak, shuning uchun uni bilishingiz kerak bo'ladi.

1-usul: Standart terminal buyruqlari

Har qanday Linux distributivining buyruq qobig'i tizim sozlamalari va fayllari bilan, shu jumladan kataloglarni o'chirish bilan turli xil amallarni bajarishga imkon beruvchi asosiy yordamchi dasturlar va vositalar to'plamini o'z ichiga oladi. Bir nechta bunday yordamchi dasturlar mavjud va ularning har biri muayyan vaziyatda eng foydali bo'ladi.

rmdir buyrug'i

Avvalo, men rmdirga tegmoqchiman. U tizimni faqat bo'sh kataloglardan tozalash uchun mo'ljallangan. Ularni doimiy ravishda yo'q qiladi va ushbu vositaning afzalligi uning sintaksisining soddaligi va hech qanday xatoning yo'qligi. Konsolda faqat rmdir papkasini yozing, bu erda papka— joriy joylashuvdagi jildning nomi. Asbob tugmani bosish orqali faollashtiriladi Kirish.

Agar siz xohlagan joyga bora olmasangiz yoki kerak bo'lmasa, to'liq katalog yo'lini ko'rsatishga hech narsa to'sqinlik qilmaydi. Keyin qator, masalan, quyidagi shaklni oladi: rmdir /home/user/folder/folder1 , bu erda foydalanuvchi- Foydalanuvchi nomi, papka asosiy katalog hisoblanadi va jild 1— oʻchirish uchun papka. E'tibor bering, uydan oldin chiziq bo'lishi kerak, lekin yo'lning oxirida hech qanday chiziq bo'lmasligi kerak.

rm buyrug'i

Oldingi vosita rm yordam dasturining tarkibiy qismlaridan biridir. Dastlab u fayllarni o'chirish uchun mo'ljallangan, lekin agar siz unga tegishli argumentni keltirsangiz, u jildni ham o'chirib tashlaydi. Ushbu parametr bo'sh bo'lmagan kataloglar uchun allaqachon mos keladi, bu holda siz konsolga rm -R papkasini (yoki katalogga to'liq yo'lni) kiritishingiz kerak. Argumentga e'tibor bering -R- bu rekursiv o'chirishni boshlaydi, ya'ni papkaning butun tarkibiga va o'ziga ta'sir qiladi. Kirishda katta-kichik harflarga sezgir bo'lish kerak, chunki -r- bu butunlay boshqacha variant.

Agar siz rm dan foydalanganda barcha o'chirilgan fayl va papkalar ro'yxatini ko'rsatishni istasangiz, unda siz qatorni biroz o'zgartirishingiz kerak bo'ladi. Kirish "Terminal" rm -Rfv papkasini oching va keyin buyruqni faollashtiring.

O'chirish tugallangach, ko'rsatilgan joyda ilgari joylashgan barcha kataloglar va alohida ob'ektlar haqidagi ma'lumotlar ko'rsatiladi.

buyrug'ini toping

Bizning veb-saytimizda Linux yadrosida ishlab chiqilgan operatsion tizimlarda find dan foydalanish misollari mavjud. Albatta, u erda faqat asosiy va eng foydali ma'lumotlar keltirilgan. Siz u bilan quyidagi havolani bosish orqali tanishishingiz mumkin va endi biz kataloglarni o'chirish kerak bo'lganda ushbu vosita qanday ishlashini bilib olishni taklif qilamiz.

  1. Ma'lumki, toping tizim ichidagi ob'ektlarni qidirishga xizmat qiladi. Qo'shimcha variantlardan foydalanish tufayli siz ma'lum bir nomga ega kataloglarni topishingiz va ularni darhol o'chirishingiz mumkin. Buning uchun konsolda find ni kiriting. -type d -name "papka" -exec rm -rf () \;, bu erda papka katalog nomi. Buni amalga oshirayotganda qo'sh tirnoqlarni yozishni unutmang.
  2. Alohida satrda ba'zan bunday fayl yoki katalog mavjud emasligi haqidagi ma'lumot ko'rsatiladi, ammo bu uning topilmaganligini anglatmaydi. Shunchaki toping katalogni tizimdan o'chirib tashlaganidan keyin yana ishladi.
  3. find ~/ -empty -type d -delete tizimidagi barcha bo'sh papkalarni o'chirish imkonini beradi. Ulardan ba'zilari faqat superuser uchun ochiq, shuning uchun oldin toping sudo qo'shilishi kerak.
  4. Ekranda barcha topilgan ob'ektlar va operatsiyaning muvaffaqiyati haqidagi ma'lumotlar paydo bo'ladi.
  5. Bundan tashqari, vositani qidirish va tozalash uchun faqat ma'lum bir katalogni belgilashingiz mumkin. Keyin qator, masalan, shunday ko'rinadi: toping /home/user/Folder/ -empty -type d -delete .

Bu Linuxda standart konsol yordam dasturlari bilan o'zaro aloqani yakunlaydi. Ko'rib turganingizdek, ularning soni juda ko'p va ularning har biri muayyan holatlarda qo'llaniladi. Agar siz boshqa mashhur jamoalar bilan tanishishni istasangiz, quyidagi havolada alohida materialimizni o'qing.

Xayrli kun, aziz o'quvchilar. Bugun men PHP da katalogni o'chirish haqida gapirmoqchiman. Operatsiya murakkab emasdek tuyuladi, ammo ba'zi nuanslar mavjud. Keling, buni amalga oshirish usullarini ko'rib chiqaylik.

Buning uchun PHP funktsiyasi mavjud rmdir(). Argument sifatida siz o'chirmoqchi bo'lgan katalogga yo'lni oladi. Biroq, katalog bo'sh bo'lishi kerak- bu asosiy shart (veb-server ishlayotgan foydalanuvchi katalog uchun yozish huquqiga ega bo'lishi kerakligi bundan mustasno). Agar fayllar katalogga joylashtirilgan bo'lsa, biz funktsiyani chaqirishda xatoga duch kelamiz. Shunga ko'ra, biz funktsiyani ishlatishdan oldin katalog degan xulosaga kelamiz rmdir() avval tozalanishi kerak.

Onlaynda ular o'chirishimiz kerak bo'lgan katalogga yo'lni argument sifatida o'tadigan funktsiyani yozishni maslahat berishadi. Funksiya tanasida katalog tarkibining ro'yxatini tashkil qilish kerak, uning doirasida faylning katalog ekanligini aniqlash uchun tekshirish o'tkaziladi. Agar fayl katalog bo'lsa, u holda funktsiya shu shart asosida o'zini chaqiradi. Bu ichki o'rnatilgan kataloglarni tozalash uchun kerak va u barcha joylashtirish darajalarida ishlaydi. Aks holda, funksiya faylga qo'llaniladi ajratish()- faylni o'chirish uchun mo'ljallangan. Ushbu tekshiruvdan tashqari, oxirgi bosqichda biz katalogni o'chirib tashlaymiz.

Amalga oshirish misoli:

Funktsiya recursiveRemoveDir($dir) ( $includes = glob($dir."/*"); foreach ($include sifatida o'z ichiga oladi) ( if(is_dir($include)) ( recursiveRemoveDir($include); ) else ( unlink( $include); ) ) rmdir($dir); ) //Joriy katalogdan tmp katalogini o'chirish recursiveRemoveDir("tmp");
Ushbu kodda qanday muammolar bor?

Oddiy hollarda, barcha qo'shimchalari bo'lgan katalog o'chiriladi. Ammo bizning katalogimizda nuqta bilan boshlanadigan yashirin fayl bor, deylik, masalan, .htaccess. Funktsiya glob() sukut bo'yicha yashirin fayllarni (DOTFILES) o'z ichiga olmaydi UNIX glob almashtirish. Misol uchun, agar biz nix terminaliga o'tsak va bash-dan foydalansak, biz bir xil muammoga duch kelamiz (glob ichidagi yashirin fayllar haqida gapiramiz). Ushbu muammoni hal qilish uchun bash-da buyruq mavjud: shopt -s dotglob- bu yashirin fayllarni butun dunyo bo'ylab almashtirishga imkon beradi. PHP da buni qo'shimcha parametr qo'shish orqali hal qilish mumkin GLOB_BRACE Uchun glob() va funksiyaning birinchi parametridan naqshni kengaytirish.

$o'z ichiga oladi = glob("tmp/(,.)*", GLOB_BRACE);
Va bu erda ham muammo bor - biz cheksiz tsiklga duch kelamiz, chunki massiv qiymatlarni o'z ichiga oladi. va.. - bu tizim darajasidagi joriy va asosiy katalogdir. Biz cheksiz tsikl bilan yakunlaymiz (va barcha asosiy kataloglarni o'chirmaymiz), chunki. sukut bo'yicha saralashning bir qismi sifatida yaratilgan massiv birinchi bo'lib keladi.. - ya'ni har safar biz bir xil katalogga kiramiz. Muammoni hal qilish uchun biz ushbu tizim kataloglaridan massiv hosil qilamiz va siklda ularning indekslarini asosiy massivdan olib tashlaymiz. Bundan tashqari, ramziy havolalar muammosi mavjud. Aytaylik, o'chirilayotgan katalog boshqa katalogga havolani o'z ichiga oladi, uning mazmuni bizni o'chirishdan mutlaqo manfaatdor emas. Muammoni hal qilish uchun rekursiya yaratishdan oldin ob'ekt havola emasligini tekshirish kerak.

Natijada, funktsiya quyidagi shaklni oladi:

Funktsiya recursiveRemoveDir($dir) ( $o'z ichiga oladi = glob($dir."/(,.)*", GLOB_BRACE); $systemDots = preg_grep("/\.+$/", $o'z ichiga oladi); foreach ($systemDots sifatida $index => $dot) ( unset($includes[$index]); ) foreach ($include sifatida $oʻz ichiga oladi) ( if(is_dir($include) && !is_link($include)) ( recursiveRemoveDir($include); ) else ( unlink($include); ) ) rmdir($dir); ) //Joriy katalogdan tmp katalogini o'chirish recursiveRemoveDir("tmp");
Kod ishlayapti, lekin aslida uni soddalashtirish mumkin edi. PHP da FilesystemIterator klassi mavjud bo'lib, u sukut bo'yicha bizga kerakli sozlamalarga ega. Bizga ro'yxati kerak bo'lgan katalogga yo'l konstruktorga uzatiladi. Biz faqat ob'ekt yaratishimiz kerak.

Funktsiya recursiveRemoveDir($dir) ( $includes = new FilesystemIterator($dir); foreach ($include sifatida o'z ichiga oladi) ( if(is_dir($include) && !is_link($include)) ( recursiveRemoveDir($include); ) boshqacha ( unlink($include); ) ) rmdir($dir); ) //Joriy katalogdan tmp katalogini o'chirish recursiveRemoveDir("tmp");
Xulosa qilib aytganda, yana bir tezkor usulni ta'kidlamoqchiman. Uni qo'llashning to'g'riligi juda shubhali - SHELL-ga bajarish uchun buyruq yuboring.

Tizim ("rm -rf tmp");
Sizning e'tiboringizni yuqori xotira iste'moliga va ma'murlar xavfsizlik nuqtai nazaridan serverda bunday funktsiyalardan foydalanishni ko'pincha taqiqlashiga qaratmoqchiman.

Teglar: php, rmdir, glob, rekursiya

Jamoa rmdir bo'sh katalogni, ya'ni fayl va papkalarsiz katalogni o'chirishga yordam beradi. Buyruqning sintaksisi juda oddiy:

Rmdir DIRNAME

Agar katalog bo'sh bo'lmasa, siz quyidagi xato xabarini ko'rasiz.

$ rmdir test rmdir: “test”ni olib tashlab boʻlmadi: Katalog boʻsh emas

2. Linuxda ichki o'rnatilgan kataloglarni qanday o'chirish mumkin?

Variantdan foydalanish -p uning ichiga quyi katalog joylashgan katalogni o'chirishingiz mumkin.

$ rmdir -p dir1/dir2/dir3

Jamoa rmdir -p dir1/dir2/dir3 bu buyruqning ekvivalenti

$ rmdir dir1/dir2/dir3 dir1/dir2 dir1

3. Kontent katalogini o'chirish

Agar siz tarkibga ega katalogni o'chirishingiz kerak bo'lsa, buyruqni ishlatishingiz mumkin rm:

$ rm -rf DIRNAME

Bu buyruq katalogni, shu jumladan uning tarkibidagi barcha fayllar va pastki kataloglarni o'chiradi. Ushbu buyruqdan ehtiyotkorlik bilan foydalaning, chunki o'chirilgan fayllarni tiklash oson protsedura bo'lmaydi.

4. Interaktiv olib tashlash

Kerakli fayllarni tasodifan o'chirib tashlamaslik uchun fayllar va papkalarni (ayniqsa, ildiz huquqlari bilan) interaktiv tarzda o'chirish uchun -i opsiyasidan foydalanishni tavsiya qilaman.

Rekursiv va interaktiv kataloglarni o'chirish.

# rm -ir DIRNAME

Interaktiv fayllarni o'chirish.

# rm -i FILENAME

5. rm va rmdir buyruqlari uchun foydali taxalluslar

Siz rm buyrug'ining standart xatti-harakati sifatida interaktiv o'chirishdan foydalanishingiz mumkin.

rm ni doimiy ravishda interaktiv tarzda bajarish uchun taxallus

# taxallus rm="rm -i"

Buyruqni ishlatganda rm buyruq aslida bajariladi rm -i. Lekin siz bir nuancega e'tibor berishingiz kerak. Kelajakda -i variantini ishlatmang, chunki siz kerakli effektni olmaysiz. Keling, bir misolni ko'rib chiqaylik:

Quyidagi buyruqda -i dan foydalanish sizga kutilgan effektni bermaydi.

$ rm -irf DIRNAME

Bunday holda, taxallusdan foydalanganda, yuqoridagi buyruq quyidagicha bajarilishi kerak:

$ rm -rf DIRNAME

Quyidagi barcha buyruqlar ekvivalent va bir xil funktsiyani bajaradi.

  • rm-fr
  • rm -rf
  • rm -r -f
  • rm -f -r

Agar sizga binoning ekspert bahosi kerak bo'lsa, men Technoplast ilmiy-ishlab chiqarish markazi mutaxassislari tomonidan tayyor binolarni tekshirishga buyurtma berishni maslahat beraman.