Ablakok.  Vírusok.  Jegyzetfüzetek.  Internet.  hivatal.  Segédprogramok.  Drivers

Jó napot, kedves olvasók. Ma egy könyvtár törléséről szeretnék beszélni PHP-ben. Úgy tűnik, hogy a művelet nem bonyolult, de van néhány árnyalat. Nézzük meg ennek módjait.

A PHP-nek van erre egy funkciója. rmdir(). Argumentumként használja a törölni kívánt könyvtár elérési útját. Azonban, a könyvtárnak üresnek kell lennie a fő feltétel (kivéve, hogy a webszervert futtató felhasználónak írási hozzáféréssel kell rendelkeznie a címtárhoz). Ha fájlok kerülnek a könyvtárba, hibaüzenetet kapunk a függvény meghívásakor. Ennek megfelelően arra a következtetésre jutunk, hogy a függvény használata előtt a könyvtár rmdir() először meg kell tisztítani.

A neten ajánlatos egy függvényt írni, amely argumentumként átadja annak a könyvtárnak az elérési útját, amelyet törölnünk kell. A függvény törzsében meg kell szervezni egy listát a könyvtár tartalmáról, amelyen belül ellenőrizni kell, hogy a fájl könyvtár-e. Ha a fájl egy könyvtár, akkor ezzel a feltétellel a függvény meghívja magát. Ez a beágyazott könyvtárak megtisztításához szükséges, és a beágyazás minden szintjén működik. Ellenkező esetben a funkció a fájlra kerül alkalmazásra unlink()- egy fájl törlésére szolgál. Az ellenőrzésen kívül az utolsó lépés a könyvtár eltávolítása.

Megvalósítási példa:

Függvény recursiveRemoveDir($dir) ( $includes = glob($dir."/*"); foreach ($includes as $include) ( if(is_dir($include)) ( recursiveRemoveDir($include); ) else ( unlink( $include); ) ) rmdir($dir); ) //A tmp könyvtár eltávolítása az aktuális könyvtárból recursiveRemoveDir("tmp");
Mik a problémák ezzel a kóddal?

Egyszerű esetekben az összes mellékletet tartalmazó könyvtár törlődik. De tegyük fel, hogy van egy rejtett fájl a könyvtárunkban, amely ponttal kezdődik, például .htaccess. Funkció glob() egy UNIX glob helyettesítő, amely alapértelmezés szerint nem tartalmaz rejtett fájlokat (DOTFILES). Például, ha egy nix terminálhoz lépünk és bash-t használunk, akkor ugyanazzal a problémával fogunk találkozni (a globon belüli rejtett fájlokról beszélünk). A probléma megoldására a bash-ban van egy parancs shopt -s dotglob- lehetővé teszi a glob helyettesítését rejtett fájlok. PHP-ben ez egy további paraméter hozzáadásával megoldható GLOB_BRACE Mert glob()és a minta kiterjesztése a függvény első paraméteréből.

$includes = glob("tmp/(,.)*", GLOB_BRACE);
És van itt egy probléma is - egy végtelen hurokkal fogunk találkozni, mivel a tömb értékeket fog tartalmazni. és.. - amely rendszerszinten az aktuális és a szülőkönyvtár. Egy végtelen ciklushoz fogunk jutni (és nem az összes szülőkönyvtár törléséhez), mert. a rendezés keretein belül alapértelmezés szerint a generált tömbben lesz az első .. - azaz minden alkalommal ugyanabba a könyvtárba fogunk hozzáférni. A probléma megoldásához alkossunk egy tömböt ezekből a rendszerkönyvtárakból, és ciklusban töröljük ki az indexeiket a főtömbből. Felmerül a szimbolikus kapcsolatok kérdése is. Tegyük fel, hogy a törölni kívánt könyvtár egy másik könyvtárra mutató hivatkozást tartalmaz, amelynek tartalmának törlése egyáltalán nem érdekel bennünket. A probléma megoldásához a rekurzió létrehozása előtt meg kell szervezni annak ellenőrzését, hogy az entitás nem hivatkozás.

Ennek eredményeként a függvény a következő formát ölti:

Függvény recursiveRemoveDir($dir) ( $includes = glob($dir."/(,.)*", GLOB_BRACE); $systemDots = preg_grep("/\.+$/", $includes); foreach ($systemDots as $index => $pont) ( unset($includes[$index]); ) foreach ($includes as $include) ( if(is_dir($include) && !is_link($include)) ( recursiveRemoveDir($include); ) else ( unlink($include); ) ) rmdir($dir); ) //A tmp könyvtár eltávolítása az aktuális könyvtárból recursiveRemoveDir("tmp");
A kód működik, de valójában egyszerűbbé is lehetett volna tenni. A PHP-ben van egy FilesystemIterator osztály, amely alapértelmezés szerint már rendelkezik a szükséges beállításokkal. Annak a könyvtárnak az elérési útja, amelynek listázására szükségünk van, átadjuk a konstruktornak. Csak egy objektumot kell létrehoznunk.

Függvény recursiveRemoveDir($dir) ( $includes = new FilesystemIterator($dir); foreach ($includes as $include) ( if(is_dir($include) && !is_link($include)) ( recursiveRemoveDir($include); ) else ( unlink($include); ) ) rmdir($dir); ) //A tmp könyvtár eltávolítása az aktuális könyvtárból recursiveRemoveDir("tmp");
Befejezésül még egyet szeretnék kiemelni gyors út. Használatának helyessége nagyon kétséges - küldjön egy parancsot, amelyet SHELL-ben kell végrehajtani.

System("rm -rf tmp");
Felhívom a figyelmet a magas memóriafogyasztásra és arra, hogy a rendszergazdák biztonsági okokból gyakran megtiltják az ilyen funkciók használatát a szerveren.

Címkék: php, rmdir, glob, recursion

Az ajánlások segítenek törölje a mappát teljesen a parancssoron keresztül. A cikkben a DEL parancsot használták, amelyet kifejezetten fájlokhoz terveztek. Mappák esetén az RD vagy RMDIR parancsok érvényesek.

A cél eléréséhez,. Írja be az RD /? és röviden ismerkedjen meg a parancs jellemzőivel és paramétereivel. Itt csak 2 lehetőség látható:

  1. /s - ennek az előtagnak a használatakor a mappa, valamint az abban beágyazott összes elem törlődik. Ha a könyvtár nem üres, és nem állította be ezt a paramétert, akkor nem kap semmit.
  2. /Q - megerősítés nélküli törléskor használatos.

BAN BEN Általános nézet a szerkezet így néz ki:

RD vagy RMDIR /s/q „a mappa teljes elérési útja”

Megjegyzés: a terv alkalmazásakor a katalógus és annak tartalma teljesen törlődik a számítógépről, és nem találja a kukában. A biztonság kedvéért csináld biztonsági mentés mappákat.

Mappa törlése megerősítéssel vagy anélkül

A számítógépemen létrehoztam egy "cmd" nevű könyvtárat, és bemásoltam néhány objektumot. Ezután írja be a következő parancsot a parancssorba:

RD /s "c:\cmd"

Ezután megnyomtam az Entert és az Y billentyűt, mivel a cmd a törlés megerősítését kérte.

A C meghajtót ellenőrizve nem találtam a könyvtárat. Ezután létrehoztam egy "delete" nevű mappát, és 5 fájlt is másoltam, de amikor beírtam a parancsot, eltávolítottam a / s előtagot. Így alakult:

RMDIR "c:\delete"

Az Enter megnyomása után a törlés nem történt meg, hanem be parancs sor Kaptam egy üzenetet, hogy a mappa nem üres. Következtetés, a /s opció nélkül csak egy üres mappát törölhet, ezért ennek az előtagnak a használata gyakorlatilag haszontalan.

Ha túl lusta beírni a megerősítő betűt (Y vagy N), akkor a következő konstrukció az Ön számára készült. A /q előtagot fentebb említettük, ő az, aki eltávolítja a bosszantó betűbevitelt (a bizonyítékot lásd a képernyőn).

Csapat RMDIR szinonimája van RDés a fájl könyvtárainak törlésére szolgál Windows rendszerek.

Parancssori formátum:

RMDIR [meghajtó:]útvonal

RD [meghajtó:] elérési út

Parancssori lehetőségek:

/S- Egy könyvtárfa törlése, azaz nem csak a megadott könyvtár, hanem az abban található összes fájl és alkönyvtár törlése is.

/Q- Kapcsolja ki a megerősítést kérő üzenetet, ha egy kulcs segítségével töröl egy címtárfát /S.

Parancshasználati példák RD (RMDIR)

Csapat RD nem támogatja a fájl- és alkönyvtár-elnevezési mintákat. Tehát például megpróbálja végrehajtani a parancsot R C:\Felhasználók\*.*, hibaüzenettel végződik a könyvtár nevében. Azonban több könyvtárút is megadható paraméterként:

RD C:\Mydocs C:\Myprogs- törölje a C:\Mydocs és C:\Myprogs mappák tartalmát.

RD C:\docs- törölje a C:\docs mappát. Ha a paraméter /S nincs beállítva, akkor a törölni kívánt mappa C:\docsüresnek kell lennie.

RD /S /Q C:\Docs- a C:\Docs mappa és az összes almappája törlése megerősítés kérése nélkül.

Az RD parancs megvalósítási jellemzője paraméterrel /S nem csak az alkönyvtárak törlődnek, hanem maga a C:\Docs könyvtár, még akkor is, ha fájlok vannak, és nem almappák. Ezért, ha csak a könyvtár tartalmát szeretné törölni (amikor a könyvtárat üressé szeretné tenni, és nem teljesen törölni), használhatja a következő trükköt - tegye aktuálissá a törölni kívánt könyvtárat, és futtassa a parancsot RD tartalmával kapcsolatban:

CD "My Folder"

RD /s/q "Saját mappám"

A szóközöket tartalmazó könyvtárnév a következő dupla idézőjelek. Mivel a CD parancs a törlendő könyvtárat tette aktuálissá, törlése nem történik meg, és a kulcs /S törli a "My Folder" könyvtár összes alkönyvtárát és fájlját

Az alábbiakban a batch file törli az üres mappákat az érték által megadott ideiglenes fájlok könyvtárában környezeti változó TEMP. A törölt mappák listája a c:\tempfoldersempty.txt fájlba kerül

FOR /D %%i in (*) do (

RMDIR /Q %%~i && visszhang %%~i >> c:\tempfoldersempty.txt

Csapat MKDIR-ra használják hozzon létre egy könyvtárat vagy alkönyvtárat. A parancs szintaxisa a következő: MKDIR[meghajtó:]útvonal. Amint a parancs szintaxisából látható, a "path" paraméter szükséges. Ez a paraméter adja meg a létrehozandó könyvtár nevét.

Például hozzunk létre egy „MyFolder” mappát a „C” meghajtón: mkdir MyFolder

Most vessen egy pillantást a "C" meghajtóra. Ha mindent helyesen csinált, a "MyFolder" mappa megjelenik a gyökérkönyvtárban. BAN BEN ez az eset létrehoztunk egy mappát az aktuális könyvtárban. Most hozzunk létre egy "MyFolder1" mappát a "D" meghajtón: mkdir d:\MyFolder

Most a "D" meghajtón van egy "MyFolder1" mappa
Ha szükséges egy alkönyvtár létrehozása, akkor ugyanazokat a parancsokat használja, megadva az összes alkönyvtárat.
Például hozzunk létre egy "world" mappát, amely a "hello" mappában található, ami viszont a "C" meghajtón található: mkdir hello\world

Ha most a "C" meghajtóra lépsz, ott a "hello" mappát fogod látni, ebben pedig a "világ" mappát. Ily módon alkönyvtárakat hozhat létre, amelyek egymásba ágyazási szintjét csak a merevlemez-terület korlátozza.
Az MKDIR parancs nem fog működni, ha olyan könyvtárat próbál létrehozni, amely már létezik a kiválasztott könyvtárban.
Például hozzunk létre egy másik mappát a „D” meghajtón „MyFolder1” néven.

Csapat RMDIR könyvtárat vagy alkönyvtárat töröl. Parancs szintaxisa: RMDIR[Q][meghajtó:]útvonal.
Például töröljük a korábban létrehozott "MyFolder1" mappát a "D" meghajtóról: rmdir d:\MyFolder1

Az RMDIR parancs meghiúsul, ha a törlendő könyvtár más könyvtárakat vagy fájlokat is tartalmaz.
Például töröljük a "hello" mappát a "C" meghajtóról (ha emlékszel, ez a mappa egy másik "világ" mappát tartalmaz): rmdir hello
Egy könyvtár törléséhez az összes alkönyvtárral és fájllal együtt használja kulcsok vagy /Q
A /S kapcsoló használatakor az RMDIR parancs eltávolítja a könyvtárat annak teljes tartalmával együtt. Törléskor a törlést megerősítő üzenet jelenik meg a képernyőn. rmdir /S hello

Egy üzenet jelenik meg a képernyőn. Ha megnyomja az "y" gombot, a "hello" mappa az összes tartalommal együtt törlődik.
A /Q opció letiltja a nem üres könyvtár törlésére vonatkozó felszólítást: rmdir /S /Q hello

Kérjük, vegye figyelembe, hogy ebben az esetben 2 billentyűt használunk egyszerre egy parancsban. A /S kapcsoló lehetővé teszi a könyvtár és annak teljes tartalmának törlését, a /Q kapcsoló pedig letiltja a törlés megerősítését kérő üzenetet.

Az MKDIR parancs MD-ként írható. Mindkét parancs hasonló egymáshoz, és az angol nyelvből származó rövidítések. "make directory" - hozzon létre egy könyvtárat.

Az RMDIR parancs RD-ként írható. Mindkét parancs hasonló egymáshoz, és az angol nyelvből származó rövidítések. "könyvtár eltávolítása" - könyvtár eltávolítása.

Fájlok törlése Linux alatt- olyan feladat, amely nem okoz nehézséget tapasztalt felhasználók. Cikkünk inkább a kezdőkre összpontosít. Ebben láthatja, hogyan törölhet fájlokat a terminálon keresztül, és milyen parancsokat a legjobb használni ehhez.

Miért jobb a konzolról törölni a fájlokat? Az a tény, hogy ez számos előnnyel és nagyobb rugalmassággal jár. Például egy speciális paranccsal egyszerűen és teljesen törölhet egy fájlt merevlemez a gyógyulás lehetősége nélkül. Vagy egyetlen paranccsal és bizonyos karakterek, feltételek vagy reguláris kifejezések használatával törölhet több száz felesleges fájlt egy bizonyos feltételeknek megfelelő könyvtárból vagy alkönyvtárakból.

Fájlok törlése Linuxban: gyakorlat

A Linux rendelkezik egy szabványos rm segédprogrammal a fájlok törlésére. Ahogy az lenni szokott szabványos közművek, van egy bizonyos gondolat az rm névben. Esetünkben az angol Remove - delete szó rövidítéséről beszélünk.

Tehát egyetlen fájl törléséhez az rm parancsot használjuk, amelyet a fájlunk neve követ:

Ha a fájlunk nem az aktuális munkakönyvtárban található, meg kell adnunk a hely elérési útját:

Rm /home/user/filename

Előfordul, hogy a fájl írásvédett. Ezután meg kell erősítenünk a parancsot. Egy fájl törléséhez ebben a helyzetben egyszerűen írja be yés nyomja meg az Entert.

rm: eltávolítja az írásvédett normál üres fájlt "fájlnév"?

Ha Linuxban egyszerre több fájlt szeretnénk törölni, akkor ez sem probléma: az rm parancsot használjuk, majd szóközzel elválasztva a fájljaink nevét:

rm fájlnév1 fájlnév2 fájlnév3

Egy másik lehetőség a helyettesítő karakter * és a reguláris kifejezések használata bizonyos fájlokhoz. Például a következő paranccsal könnyen törölhetjük az összes .txt kiterjesztésű fájlt Linuxon:

Az egyes fájlok törlés előtti megerősítéséhez használja a -i kapcsolót:

rm -i fájlnév(ek)

De ha sok fájl van, és határozottan biztos abban, hogy a parancs helyes, és nem akar minden alkalommal válaszolni a rendszer kérdésére, használja az ellenkező -f opciót. Minden fájl feltétel nélkül, azaz további kérdések nélkül törlődik:

rm -f fájlnév(ek)

Törölje a mappákat és könyvtárakat Linux alatt

Ha egy üres könyvtárat szeretne eltávolítani, használja a -d kapcsolót.

Ha törölni szeretnénk egy nem üres könyvtárat és a benne lévő összes fájlt, akkor a következőképpen járjunk el:

Az írásvédelem esetében ismét Linux rendszer megkérdezi a felhasználót, hogy végrehajtja-e a törlést. Ha minden további nélkül el szeretnénk távolítani a fájlokat és a nem üres könyvtárakat, akkor ezt tegyük:

Ha egyszerre több könyvtárat szeretnénk eltávolítani, akkor az rm parancsot használjuk, majd a könyvtárneveket szóközzel elválasztva:

rm -r könyvtárnév1 könyvtárnév2 könyvtárnév3

Egyébként itt használhatjuk a helyettesítő karaktert (*) és reguláris kifejezések A több könyvtárnak megfelelő.

következtetéseket

Amint látja, egy fájl törlése Linuxban a terminálon keresztül egyáltalán nem nehéz, így mindenki képes kezelni ezt a műveletet. Ennek során nemcsak meg kell értenie, hogyan kell megfelelően használni az rm parancsot Linuxon, hanem azt is tudnia kell, hogyan kell biztonságosan csinálni.

Ha hibát észlel, jelöljön ki egy szövegrészt, és nyomja meg a Ctrl + Enter billentyűket
OSSZA MEG: