A vegades necessites eliminar gairebé tots els fitxers d'un directori, Però vols conservar un o alguns d'ells. Quan hi ha gran quantitat d'ells, anar un a un és una tasca tediosa. No és la millor opció, hi ha formes de poder fer molt més senzill el treball en Linux i que puguis eliminar tots els que necessites d'una vegada.
Per exemple, és probable que vulguis eliminar només els que comencen per un nom determinat, o els que tenen una extensió específica, etc. Tot això és possible, De fet, en altres ocasions ja he mostrat tutorials similars a LxA. Aquí podràs seguir el tutorial pas a pas i de forma simple per a poder eliminar tots aquests fitxers que vols, excepte el que vols salvar.
I el millor és que no et caldrà instal·lar cap programa, es pot fer fàcilment amb ordres com rm i find. És a dir, programes que ja vénen preinstal·lats en qualsevol distro Linux. I per descomptat, el mètode es basarà en la recerca de patrons i utilitzar aquestes coincidències per eliminar només allò que vols.
Doncs bé, per a poder eliminar hi diverses alternatives, Que són ...
Eliminar fitxers d'un directori amb rm
Bé, per a poder fer servir el ordre rm per eliminar el que et ve de gust, has de conèixer abans algunes formes d'identificar patrons:
- * (Llista de patrons) - coincideix amb zero o més ocurrències dels patrons especificats
- ? (Llista de patrons) - coincideix amb zero o una ocurrència dels patrons especificats
- + (Llista de patrons) - coincideix amb una o més ocurrències dels patrons especificats
- @ (Llista de patrons) - coincideix amb un dels patrons especificats
- ! (Llista de patrons) - coincideix amb qualsevol cosa excepte amb un dels patrons donats
Per a la activar extglob per poder-los fer servir, has d'executar primer la següent comanda:
<br data-mce-bogus="1"> shopt -s extglob<br data-mce-bogus="1">
Ara ja pots utilitzar rm per eliminar el que et vingui de gust. Per exemple, eliminar tots els fitxers d'un directori excepte els que coincideixin amb el nom «Lxa»:
rm -v !("lxa")
També pots especificar dos o més noms que no vols eliminar. Per exemple, per evitar eliminar «lxa» i «desdelinux»:
rm -v !("lxa"|"desdelinux")
Pots eliminar tots els fitxers, menys els que tenen extensió .mp3. Per exemple:
rm -v !(*.mp3)
A l'acabar, pots tornar a desactivar extglob:
shopt -u extglob
Eliminar fitxers d'un directori amb find
Una altra alternativa a rm és utilitzar find per eliminar el que et ve de gust. Pots utilitzar una pipe i xargs amb rm, o fer servir l'opció -delete de find. És a dir, la sintaxi genèrica seria:
find /directory/ -type f -not -name 'PATRÓN' -delete find /directory/ -type f -not -name 'PATRÓN' -print0 | xargs -0 -I {} rm [opciones] {}
Per exemple, imagina que vols eliminar tots els fitxers d'un directori menys els que tenen extensió .jpg, podries fer servir un d'aquests dos ordres, ja que tots dos obtenen el mateix resultat:
find . -type f -not -name '*.jpg'-delete find . -type f -not -name '*.jpg' -print0 | xargs -0 -I {} rm -v {}
En canvi, si volguessis afegir algun patró extra, També podries. Per exemple, imagina que no vols eliminar ni els .pdf ni els .odt d'un directori:
find . -type f -not \(-name '*pdf' -or -name '*odt' \) -delete
Per descomptat, el mateix podries fer amb | i xargs com en l'exemple anterior. Per cert, hem fet servir -not per negar, però pots eliminar això per fer-ho positiu, és a dir, per eliminar els patrons que coincideixen i no excloure'ls.
Eliminar fitxers d'un directori usant la variable GLOBIGNORE
Finalment, hi ha una altra alternativa a find i rm, i és usant una variable d'entorn per assenyalar als fitxers que vols eliminar o excloure. Per exemple, imagina que vols eliminar tots els fitxers d'un directori anomenat Descàrregues salvant els .pdf, .mp3 i .mp4. En aquest cas, podries fer el següent:
cd Descargas GLOBIGNORE=*.pdf:*.mp4:.*mp3 rm -v * unset GLOBIGNORE