Ta bort en katalog i PHP. MKDIR och RMDIR kommando för att skapa och ta bort en katalog Hur man tar bort en katalog med en Linux-fil

För att ta bort en fil eller katalog i Linux från kommandoraden, använd kommandot rm (remove).

Var särskilt försiktig när du tar bort filer eller kataloger med kommandot rm, för när en fil väl har raderats kan den inte återställas.

I den här artikeln visar vi dig hur du använder kommandot rm för att ta bort filer och kataloger i, med exempel och förklaringar av de vanligaste rm-alternativen.

Hur man tar bort filer

  • För att ta bort en enskild fil, använd kommandot rm följt av filnamnet:

    rm filnamn

    Om filen är skrivskyddad kommer du att uppmanas att bekräfta den enligt nedan. För att radera en fil, skriv y och tryck på Enter. Annars, om filen inte är skrivskyddad, kommer den att raderas utan att du uppmanas att göra det.

    rm: ta bort skrivskyddad vanlig tom fil "filnamn"?

  • För att radera flera filer samtidigt, använd kommandot rm följt av filnamnen separerade med ett mellanslag.

    rm filnamn1 filnamn2 filnamn3

    Du kan också använda jokertecken (*) och reguljära uttryck för att matcha flera filer. Om du till exempel vill ta bort alla filer med filtillägget .pdf i den aktuella katalogen använder du följande kommando:

    rm *.pdf

    När du använder rm med jokertecken(*) och vanliga tillägg, rekommenderas det att lista filerna med kommandot ls så att du kan se vilka filer som kommer att tas bort innan du kör kommandot rm.

  • Använd alternativet -i för att bekräfta varje fil innan du raderar:

    rm -i filnamn

  • För att radera filer utan att fråga, även om filerna är skrivskyddade, använd alternativet -f (force):

    rm -f filnamn

  • Du kan också kombinera rm-alternativ. Om du till exempel vill ta bort alla .txt-filer i den aktuella katalogen utan en uppmaning i utförligt läge, använder du följande kommando:

    rm -fv *.txt

Hur man tar bort kataloger (mappar)

  • För att ta bort en tom katalog, använd alternativet -d.

    rm -d dirname

  • För att ta bort icke-tomma kataloger och alla filer i dem, använd alternativet r (rekursivt).

    rm -r dirname

    Om katalogen eller filen i katalogen är skrivskyddad kommer du att uppmanas att bekräfta raderingen.

  • För att ta bort icke-tomma kataloger och alla filer utan att fråga, använd r (rekursiv) och alternativet -f.

    rm -rf dirname

  • För att ta bort flera kataloger samtidigt, använd kommandot rm följt av katalognamnen separerade med ett mellanslag.

    rm -r katalognamn1 katalognamn2 katalognamn3

    Samma som i filer, du kan också använda jokertecken (*) och reguljära uttryck för att matcha flera kataloger.

Slutsats

Vid det här laget bör du ha en god förståelse för hur du använder kommandot rm i Linux och du bör säkert kunna ta bort filer och kataloger med hjälp av kommandoraden.

Kommandona rm och rmdir tar bort filer och kataloger på Linux, macOS och andra Unix-liknande operativsystem. De liknar kommandona del och deltree i Windows och DOS. Dessa kommandon är mycket kraftfulla och har en hel del alternativ.

Det är viktigt att notera att filer och kataloger som raderas med rm och rmdir inte flyttas till papperskorgen. De tas omedelbart bort från din dator. Om du av misstag raderade filer med dessa kommandon kommer du bara att kunna återställa dem från en säkerhetskopia.

Hur man tar bort filer med rm

Det enklaste fallet är att ta bort en enda fil i den aktuella katalogen. Skriv kommandot rm, ett mellanslag och sedan namnet på filen du vill ta bort.

Rm file_1.txt

Om filen inte finns i den aktuella arbetskatalogen, ange sökvägen till filplatsen.

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

Du kan skicka mer än ett filnamn till rm. Detta tar bort alla angivna filer.

Rm file_2.txt file_3.txt

Jokertecken kan användas för att välja grupper av filer som ska raderas. Skylt * representerar flera tecken och tecknet ? representerar ett tecken. Detta kommando kommer att radera alla png-bildfiler i den aktuella arbetskatalogen.

Rm * .png

Detta kommando tar bort alla filer med samma teckentillägg. Till exempel kommer detta att radera File.1 och File.2, men inte File.12.

Rm *.?

Om filen är skrivskyddad kommer du att uppmanas att ta bort filen. Du måste svara med y eller n och tryck på "Enter".

För att minska risken att använda rm med jokertecken, använd alternativet -jag(interaktiv). För att göra detta måste du bekräfta raderingen av varje fil.

Rm -i * .dat

Alternativ -f(kraft) är motsatsen till interaktiv. Den ber inte om bekräftelse även om filerna är skrivskyddade.

Rm -f filnamn

Hur man tar bort kataloger med rm

För att ta bort en tom katalog, använd alternativet -d(katalog). Du kan använda jokertecken (* och ?) i katalognamn precis som du kan i filnamn.

Rm -d katalog

Om du anger mer än ett katalognamn tas alla angivna tomma kataloger bort.

Rm -d katalog1 katalog2 /sökväg/till/katalog3

För att ta bort icke-tomma kataloger, använd alternativet -r(rekursiv). För att vara tydlig tar detta bort kataloger och alla filer och underkataloger som finns i dem.

Rm -r katalog1 katalog2 katalog3

Om katalogen eller filen är skrivskyddad kommer du att uppmanas att bekräfta raderingen. För att ta bort icke-tomma kataloger och undertrycka dessa uppmaningar, använd alternativen tillsammans -r(rekursiv) och -f(tvingade).

Rm -rf katalog

Försiktighet krävs här. Kommandofel rm -rf kan leda till dataförlust eller systemfel. Detta är farligt och försiktighet är den bästa policyn. För att få en uppfattning om katalogstrukturen och filerna som kommer att raderas av rm -rf, använd trädkommandot.

Använd apt-get för att installera det här paketet på ditt system om du använder Ubuntu eller en annan Debian-baserad distribution. På andra Linux-distributioner, använd din Linux-distributions pakethanteringsverktyg.

Sudo apt-get installationsträd

Att köra kommandot träd ger ett lättförståeligt diagram över katalogstrukturen och filerna under katalogen som det körs från.

Du kan också ange sökvägen till trädkommandot så att det kör trädet från en annan katalog i filsystemet.

Träd sökväg/till/katalog

Kommandot rm har också --one-file-system , --no-preserve-root , --preserve-root alternativ, men dessa rekommenderas endast för avancerade användare. Om du gör något fel kan du av misstag radera alla dina systemfiler.

Hur man tar bort kataloger med rmdir

Det finns ett annat kommando, rmdir, som du kan använda för att ta bort kataloger. Skillnaden mellan rm och rmdir är att rmdir bara kan ta bort tomma kataloger. Det kommer aldrig att radera filer.

Det enklaste fallet är att ta bort en tom katalog. Som med rm kan du skicka flera katalognamn till rmdir eller rmdir en katalogsökväg.

Ta bort en katalog i den aktuella katalogen genom att skicka dess namn till rmdir:

Rmdir katalog

Ta bort flera kataloger genom att skicka en lista med namn till rmdir:

Rmdir katalog1 katalog2 katalog3

Ta bort en katalog som inte finns i den aktuella katalogen genom att ange den fullständiga sökvägen till den katalogen:

Rmdir /sökväg/till/katalog

Om du försöker ta bort en mapp som inte är tom kommer rmdir att ge dig ett felmeddelande. I följande exempel tar rmdir framgångsrikt och tyst bort klientkatalogen men vägrar att ta bort projektkatalogen eftersom den innehåller filer. Projektkatalogen förblir exakt som den var, och filerna i den är orörda.

När rmdir utfärdar felet "Katalog inte tom", slutar den att bearbeta katalogerna som skickas till den på kommandoraden. Om du bad om att ta bort fyra kataloger och den första innehöll filer, kommer rmdir att ge dig ett felmeddelande och inte göra något annat. Du kan tvinga den att ignorera dessa fel med --ignore-fail-on-non-empty för att bearbeta andra kataloger.

I följande exempel har två mappar överförts till rmdir, de är arbete/rapporter och arbete/citat. Alternativet --ignore-fail-on-non-empty ingår i kommandot. Mappen arbete/rapporter innehåller filer, så rmdir kan inte ta bort den. Alternativet --ignore-fail-on-non-empty gör att rmdir ignorerar felet och går vidare till nästa mapp som den måste bearbeta, vilket är work/quotes. Detta är en tom mapp och rmdir tar bort den.

Detta kommando användes.

Rmdir --ignore-fail-on-icke-empty work/reports /work/quotes

Du kan använda alternativet -s(förälder) för att ta bort en katalog och även ta bort dess överordnade kataloger. Det här tricket fungerar eftersom rmdir startar vid målkatalogen och går sedan tillbaka till föräldern. Denna katalog bör nu vara tom så att den kan tas bort av rmdir och processen upprepar steget bakåt längs den sökväg som tillhandahålls av rmdir.

I följande exempel är kommandot som skickas till rmdir:

Rmdir -p arbete/fakturor

Fakturorna och arbetskatalogerna raderas på begäran.

Använder du Bash eller något annat skal? Linux tillhandahåller flexibla och kraftfulla kommandon för att ta bort kataloger och filer direkt från terminalens kommandorad. Vissa människor föredrar att ha ett arbetsflöde som kretsar kring en terminal. Andra kanske inte har något val i frågan. De kan köras på servrar utan ett GUI installerat, eller i en fjärrsession på ett fristående system som en Raspberry Pi. Dessa team är perfekta för den här gruppen människor.

Men vilken typ av arbetsflöde du än föredrar, lämpar sig dessa kommandon mycket väl för att inkluderas i skalskript. Om skriptet körs av ett cron-jobb kan det hjälpa till att automatisera rutinmässiga hushållsuppgifter som att rensa upp oönskade loggfiler. Om du utforskar det här användningsfallet, var medveten om kraften i dessa kommandon, kontrollera allt noggrant och behåll alltid en ny säkerhetskopia.

Operativsystem baserade på Linux-kärnan lagrar vanligtvis ett stort antal tomma och icke-tomma kataloger. Vissa av dem tar upp ganska mycket lagringsutrymme och blir ofta onödiga. I det här fallet skulle det korrekta alternativet vara att ta bort dem. Det finns flera sätt att utföra rengöring, var och en av dem är tillämplig i en specifik situation. Låt oss titta på alla tillgängliga metoder mer i detalj, och du kommer att välja den mest lämpliga utifrån dina behov.

I den här artikeln kommer vi att prata om konsolverktyg och ytterligare verktyg som startas genom att ange kommandon. Glöm dock inte att grafiska skal ofta implementeras i distributioner. Följaktligen, för att ta bort en katalog, behöver du bara gå till den via filhanteraren, högerklicka på ikonen och välj "Radera". Glöm inte att tömma soporna efteråt. Det här alternativet kommer dock inte att gälla för alla användare, så vi rekommenderar att du läser följande guider.

Innan du börjar titta på metoderna är det viktigt att notera att när du anger ett kommando, kommer du oftast självständigt att ange namnet på mappen som du vill ta bort. När du inte är på plats måste du ange hela vägen. Om möjligt rekommenderar vi att du tar reda på objektets överordnade katalog och går till den via konsolen. Denna åtgärd är klar på bara några minuter:


Om du inte kan bestämma platsen måste du när du raderar ange hela sökvägen själv, så du måste veta den.

Metod 1: Standardterminalkommandon

Kommandoskalet för alla Linux-distributioner innehåller en uppsättning grundläggande verktyg och verktyg som låter dig utföra en mängd olika åtgärder med systeminställningar och filer, inklusive radering av kataloger. Det finns flera sådana verktyg och var och en kommer att vara mest användbar i en viss situation.

rmdir kommando

Först och främst skulle jag vilja beröra rmdir. Den är utformad för att endast rengöra systemet från tomma kataloger. Tar bort dem permanent, och fördelen med detta verktyg är enkelheten i dess syntax och frånvaron av några fel. I konsolen skriver du bara rmdir-mappen , där mapp— namnet på mappen på den aktuella platsen. Verktyget aktiveras genom att trycka på en tangent Stiga på.

Det finns inget som hindrar dig från att ange hela katalogsökvägen om du inte kan navigera till den plats du vill eller inte behöver. Då har raden till exempel följande form: rmdir /home/user/folder/folder1 , där användare- Användarnamn, mappär den överordnade katalogen, och mapp1— mapp att radera. Observera att det måste finnas ett snedstreck innan hemmet, men i slutet av stigen får det inte finnas något snedstreck.

rm kommando

Det tidigare verktyget är en av komponenterna i rm-verktyget. Från början är det tänkt att radera filer, men om du ger det rätt argument kommer det också att radera mappen. Det här alternativet är redan lämpligt för icke-tomma kataloger; i det här fallet måste du ange rm -R-mappen (eller hela sökvägen till katalogen) i konsolen. Notera argumentet -R- det startar en rekursiv radering, det vill säga det påverkar hela innehållet i mappen och sig själv. Det är nödvändigt att vara skiftlägeskänslig när du går in eftersom -r– det här är ett helt annat alternativ.

Om du vill visa en lista över alla raderade filer och mappar när du använder rm, måste du ändra raden lite. Gå in "Terminal" rm -Rfv-mappen och aktivera sedan kommandot.

När raderingen är klar kommer information om alla kataloger och enskilda objekt som tidigare fanns på den angivna platsen att visas.

hitta kommando

Vår webbplats har redan material med exempel på användning av find i operativsystem utvecklade på Linux-kärnan. Naturligtvis presenteras bara den grundläggande och mest användbara informationen där. Du kan bekanta dig med det genom att klicka på följande länk, och nu föreslår vi att ta reda på hur det här verktyget fungerar när du behöver ta bort kataloger.

  1. Som bekant, hitta tjänar till att söka efter objekt i systemet. Tack vare användningen av ytterligare alternativ kan du hitta kataloger med ett specifikt namn och radera dem omedelbart. För att göra detta anger du hitta i konsolen. -typ d -namn "mapp" -exec rm -rf () \;, där mappen är namnet på katalogen. Var noga med att skriva dubbla citattecken när du gör detta.
  2. En separat rad visar ibland information om att en sådan fil eller katalog inte finns, men det betyder inte att den inte hittades. Bara hitta fungerade igen efter att ha tagit bort katalogen från systemet.
  3. find ~/ -empty -typ d -delete låter dig ta bort alla tomma mappar på systemet. Vissa av dem är bara tillgängliga för superanvändaren, så tidigare hitta sudo bör läggas till.
  4. Data om alla hittade objekt och om operationen lyckades visas på skärmen.
  5. Du kan också ange endast en specifik katalog för verktyget att söka och rensa. Då kommer raden att se ut till exempel så här: hitta /home/user/Folder/ -empty -typ d -delete .

Detta fullbordar interaktionen med vanliga konsolverktyg i Linux. Som du kan se finns det ett stort antal av dem och var och en är tillämplig i vissa situationer. Om du vill bekanta dig med andra populära lag, läs vårt separata material på länken nedan.

Team rmdir hjälper oss att ta bort en tom katalog, det vill säga en katalog utan filer och mappar. Kommandosyntaxen är mycket enkel:

Rmdir DIRNAME

Om katalogen inte är tom kommer du att se följande felmeddelande.

$ rmdir test rmdir: misslyckades med att ta bort `test': Katalogen inte tom

2. Hur tar man bort kapslade kataloger i Linux?

Använder alternativet -s du kan ta bort en katalog med en underkatalog kapslad i den.

$ rmdir -p dir1/dir2/dir3

Team rmdir -p dir1/dir2/dir3 detta är motsvarigheten till kommandot

$ rmdir dir1/dir2/dir3 dir1/dir2 dir1

3. Ta bort innehållskatalogen

Om du behöver ta bort en katalog med innehåll kan du använda kommandot rm:

$ rm -rf DIRNAME

Detta kommando tar bort en katalog, inklusive alla filer och underkataloger som den innehåller. Använd det här kommandot med försiktighet, eftersom det inte kommer att vara en enkel procedur att återställa raderade filer.

4. Interaktiv borttagning

För att undvika att oavsiktligt radera nödvändiga filer rekommenderar jag att du överväger att använda alternativet -i för att interaktivt radera filer och mappar (särskilt med roträttigheter).

Rekursiv och interaktiv radering av kataloger.

# rm -ir DIRNAME

Interaktiv filradering.

# rm -i FILNAMN

5. Användbara alias för kommandona rm och rmdir

Du kan använda interaktiv radering som standardbeteende för rm-kommandot.

Alias ​​för att ständigt köra rm interaktivt

# alias rm="rm -i"

När du använder kommandot rm kommandot kommer faktiskt att köras rm -i. Men du måste vara uppmärksam på en nyans. Använd inte alternativet -i i framtiden eftersom du inte kommer att få önskad effekt. Låt oss titta på ett exempel:

I följande kommando kommer inte att ge dig den förväntade effekten att använda -i.

$ rm -irf DIRNAME

I det här fallet, när du använder ett alias, måste kommandot ovan köras enligt följande:

$ rm -rf DIRNAME

Alla kommandon nedan är likvärdiga och utför samma funktionalitet.

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

Om du behöver en expertbedömning av en byggnad rekommenderar jag att du beställer en besiktning av färdiga byggnader av specialister från Technoplasts forsknings- och produktionscenter

God dag kära läsare. Idag skulle jag vilja prata om att ta bort en katalog i PHP. Det verkar som att operationen inte är komplicerad, men det finns några nyanser. Låt oss titta på sätt att göra detta.

PHP har en funktion för detta rmdir(). Det tar som ett argument sökvägen till katalogen du vill ta bort. Dock, katalogen måste vara tom- detta är huvudvillkoret (förutom det faktum att användaren från vilken webbservern körs måste ha skrivrättigheter för katalogen). Om filer placeras i katalogen får vi ett felmeddelande när vi anropar funktionen. Följaktligen kommer vi till slutsatsen att katalogen innan du använder funktionen rmdir() måste rengöras först.

Online rekommenderar de att du skriver en funktion som kommer att passera som ett argument vägen till katalogen som vi behöver ta bort. I huvuddelen av funktionen är det nödvändigt att organisera en lista över innehållet i katalogen, inom ramen för vilken en kontroll görs för att avgöra om filen är en katalog. Om filen är en katalog anropar funktionen sig själv baserat på detta villkor. Detta är nödvändigt för att rensa ut kapslade kataloger, och det kommer att fungera på alla kapslingsnivåer. Annars tillämpas funktionen på filen ta bort länk ()- den är utformad för att radera en fil. Utanför denna kontroll tar vi bort katalogen i det sista steget.

Exempel på implementering:

Funktion recursiveRemoveDir($dir) ( $includes = glob($dir."/*"); foreach ($includes som $include) ( if(is_dir($include)) ( recursiveRemoveDir($include); ) else ( unlink( $include); ) ) rmdir($dir); ) //Ta bort tmp-katalogen från den aktuella katalogen recursiveRemoveDir("tmp");
Vilka problem har den här koden?

I enkla fall kommer katalogen med alla bilagor att raderas. Men anta att det i vår katalog finns en dold fil som börjar med en punkt, till exempel, .htaccess. Fungera glob()är en UNIX-globersättning som inte inkluderar dolda filer (DOTFILES) som standard. Till exempel, om vi går till nix-terminalen och använder bash kommer vi att stöta på samma problem (vi pratar om dolda filer inom globs). Det finns ett kommando i bash för att lösa det här problemet: shopt -s dotglob- Det tillåter glob-ersättning av dolda filer. I PHP kan detta lösas genom att lägga till en extra parameter GLOB_BRACE För glob() och utöka mönstret från den första parametern i funktionen.

$includes = glob("tmp/(,.)*", GLOB_BRACE);
Och här finns det också ett problem - vi kommer att stöta på en oändlig loop, eftersom arrayen kommer att innehålla värden. och.. - som är den aktuella och överordnade katalogen på systemnivå. Vi kommer att sluta med en oändlig loop (och inte ta bort alla överordnade kataloger) eftersom. som en del av standardsorteringen kommer den genererade arrayen först.. - det vill säga varje gång vi kommer åt samma katalog. För att lösa problemet kommer vi att bilda en array från dessa systemkataloger och i en slinga ta bort deras index från huvudarrayen. Det finns också problemet med symboliska länkar. Låt oss säga att katalogen som tas bort innehåller en länk till en annan katalog, vars innehåll vi absolut inte är intresserade av att radera. För att lösa problemet, innan du skapar rekursion, är det nödvändigt att kontrollera att enheten inte är en referens.

Som ett resultat tar funktionen följande form:

Funktion recursiveRemoveDir($dir) ( $includes = glob($dir."/(,.)*", GLOB_BRACE); $systemDots = preg_grep("/\.+$/", $includes); foreach ($systemDots as $index => $dot) ( unset($includes[$index]); ) foreach ($includes som $include) (if(is_dir($include) && !is_link($include)) ( recursiveRemoveDir($include); ) else ( unlink($include); ) ) rmdir($dir); ) //Ta bort tmp-katalogen från den aktuella katalogen recursiveRemoveDir("tmp");
Koden fungerar, men i själva verket kunde den ha gjorts enklare. I PHP finns en klass FilesystemIterator, som som standard redan har de inställningar vi behöver. Sökvägen till katalogen vars lista vi behöver skickas till konstruktorn. Vi behöver bara skapa ett objekt.

Funktion recursiveRemoveDir($dir) ( $includes = new FilesystemIterator($dir); foreach ($includes som $include) ( if(is_dir($include) && !is_link($include)) ( recursiveRemoveDir($include); ) else ( unlink($include); ) ) rmdir($dir); ) //Ta bort tmp-katalogen från den aktuella katalogen recursiveRemoveDir("tmp");
Avslutningsvis skulle jag vilja notera ytterligare ett snabbt sätt. Riktigheten av dess användning är mycket tveksam - skicka kommandot för exekvering till SHELL.

System("rm -rf tmp");
Jag vill uppmärksamma er på den höga minnesförbrukningen och på det faktum att administratörer ofta förbjuder användningen av sådana funktioner på servern av säkerhetsskäl.

Taggar: php, rmdir, glob, rekursion

Dela med sig