Weboldal keresés

3 módszer az összes fájl törlésére egy könyvtárban, kivéve egy vagy néhány kiterjesztésű fájlt


Néha olyan helyzetbe kerül, hogy törölnie kell egy könyvtár összes fájlját, vagy egyszerűen meg kell tisztítania egy könyvtárat úgy, hogy eltávolítja az összes fájlt, kivéve egy adott típusú (egy adott kiterjesztéssel végződő) fájlt.

Ebben a cikkben bemutatjuk, hogyan törölhet fájlokat egy könyvtárban, kivéve bizonyos fájlkiterjesztéseket vagy -típusokat az rm, find és globignore parancsok használatával.

Mielőtt továbblépnénk, kezdjük azzal, hogy röviden áttekintjük a Linux egyik fontos fogalmát – a fájlnév-minta-illesztést, amely lehetővé teszi számunkra, hogy kezeljük aktuális problémánkat.

Javasolt olvasmány: Használja a find parancsot több fájlnév/kiterjesztés kereséséhez Linux alatt

Linuxban a shell-minta egy karakterlánc, amely a következő speciális karakterekből áll, amelyeket helyettesítő karaktereknek vagy metakaraktereknek nevezünk:

  1. * – nulla vagy több karakternek felel meg
  2. ? – bármely karakternek megfelel
  3. [seq] – a következő karakterek bármelyikére illeszkedik
  4. [!seq] – minden olyan karakterre illeszkedik, amely nem a szekvenciában szerepel

Három lehetséges módszert fogunk itt megvizsgálni, ezek a következők:

Fájlok törlése Extended Pattern Matching Operátorok használatával

Az alábbiakban felsoroljuk a különböző kiterjesztett mintaegyeztetési operátorokat, ahol a pattern-list egy olyan lista, amely egy vagy több fájlnevet tartalmaz, a | karakterrel elválasztva:

  1. *(minta-lista) – a megadott minták nulla vagy több előfordulásának felel meg
  2. ?(pattern-list) – a megadott minták nullára vagy egy előfordulására egyezik
  3. +(minta-lista) – megfelel a megadott minták egy vagy több előfordulásának
  4. @(pattern-list) – megfelel a megadott minták egyikének
  5. !(pattern-list) – a megadott minták egyikén kívül bármire egyezik

Használatukhoz engedélyezze az extglob shell opciót az alábbiak szerint:

shopt -s extglob

1. A fájlnév kivételével a könyvtárban lévő összes fájl törléséhez írja be az alábbi parancsot:

rm -v !("filename")

2. Az összes fájl törlése a fájlnév1 és a fájlnév2 kivételével:

rm -v !("filename1"|"filename2") 

3. Az alábbi példa bemutatja, hogyan távolíthat el interaktív módon minden fájlt, kivéve az összes .zip fájlt:

rm -i !(*.zip)

4. Ezután törölheti a könyvtárban lévő összes fájlt, kivéve az összes .zip és .odt fájlt, az alábbiak szerint, miközben megjeleníti a folyamatban lévő tartalmat. Kész:

rm -v !(*.zip|*.odt)

Ha minden szükséges parancs megvan, kapcsolja ki az extglob shell opciót, például:

shopt -u extglob

Fájlok törlése Linux használatával keresse meg a parancsot

Ennél a módszernél a find parancsot kizárólag a megfelelő opciókkal vagy az xargs paranccsal együtt használhatjuk az alábbi űrlapokon látható folyamat segítségével:

find /directory/ -type f -not -name 'PATTERN' -delete
find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm {}
find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm [options] {}

5. A következő parancs a .gz fájlok kivételével az összes fájlt törli az aktuális könyvtárban:

find . -type f -not -name '*.gz'-delete

6. Egy pipeline és xargs használatával a fenti kis- és nagybetűket az alábbiak szerint módosíthatja:

find . -type f -not -name '*gz' -print0 | xargs -0  -I {} rm -v {}

7. Nézzünk meg egy további példát, az alábbi parancs törli az összes fájlt, kivéve a .gz, .odt és fájlokat. .jpg fájlok az aktuális könyvtárban:

find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete

Fájlok törlése a Bash GLOBIGNORE változó használatával

Ez az utolsó megközelítés azonban csak bash esetén működik. Itt a GLOBIGNORE változó kettősponttal elválasztott mintalistát (fájlneveket) tárol, amelyeket figyelmen kívül kell hagyni az elérési út kiterjesztésével.

Javasolt olvasmány: Hasznos 12 gyakorlati példa a Grep parancsra Linuxon

A módszer használatához lépjen a tisztítani kívánt könyvtárba, majd állítsa be a GLOBIGNORE változót az alábbiak szerint:

cd test
GLOBIGNORE=*.odt:*.iso:*.txt

Ebben az esetben a .odt, .iso és .txt fájlok kivételével minden olyan fájlt el kell távolítani az aktuális könyvtárból.

Most futtassa a parancsot a könyvtár megtisztításához:

rm -v *

Ezt követően kapcsolja ki a GLOBIGNORE változót:

unset GLOBIGNORE

Megjegyzés: A fenti parancsokban használt zászlók jelentésének megértéséhez tekintse meg a különféle illusztrációkban használt parancsok kézikönyvoldalait.

Ez minden! Ha bármilyen más parancssori technikát szeretne ugyanarra a célra, ne felejtse el megosztani velünk az alábbi visszajelzési szakaszban.