3 veidi, kā izdzēst visus direktorija failus, izņemot vienu vai dažus failus ar paplašinājumiem
Dažreiz jūs nonākat situācijā, kad jums jāizdzēš visi direktorijā esošie faili vai vienkārši jāattīra katalogs, noņemot visus failus, izņemot noteikta veida failus (kas beidzas ar noteiktu paplašinājumu).
Šajā rakstā mēs parādīsim, kā izdzēst failus direktorijā, izņemot dažus failu paplašinājumus vai veidus, izmantojot komandas rm, find un globignore.
Pirms mēs virzāmies tālāk, sāksim īsi apskatīt vienu svarīgu Linux jēdzienu - faila nosaukuma modeļa saskaņošanu, kas ļaus mums tikt galā ar mūsu problēmu.
Linux čaulas modelis ir virkne, kas sastāv no šādām īpašajām rakstzīmēm, kuras tiek dēvētas par aizstājējzīmēm vai metarakstu zīmēm:
-
*
- atbilst nullei vai vairāk rakstzīmēm -
?
- atbilst jebkurai atsevišķai rakstzīmei -
[seq]
- atbilst jebkurai sekā esošai rakstzīmei -
[! seq]
- atbilst jebkurai rakstzīmei, kas nav seq
Šeit mēs izpētīsim trīs iespējamās metodes, un tās ietver:
Dzēst failus, izmantojot paplašinātā modeļa atbilstības operatorus
Dažādi paplašināto rakstu atbilstības operatori ir uzskaitīti zemāk, kur rakstu saraksts ir saraksts, kurā ir viens vai vairāki failu nosaukumi, atdalīti ar rakstzīmi |
:
-
* (pattern-list)
- atbilst nullei vai vairākiem norādīto modeļu gadījumiem -
? (pattern-list)
- atbilst nullei vai vienam norādīto modeļu gadījumam - + (modeļu saraksts) - atbilst vienam vai vairākiem norādīto modeļu gadījumiem
-
@ (pattern-list)
- atbilst vienam no norādītajiem modeļiem -
! (pattern-list)
- atbilst visam, izņemot vienu no dotajiem modeļiem
Lai tos izmantotu, iespējojiet opciju extglob apvalks šādi:
# shopt -s extglob
1. Lai izdzēstu visus direktorijas failus, izņemot faila nosaukumu, ierakstiet zemāk esošo komandu:
$ rm -v !("filename")
2. Lai izdzēstu visus failus, izņemot faila nosaukums1 un faila nosaukums2:
$ rm -v !("filename1"|"filename2")
3. Tālāk sniegtajā piemērā parādīts, kā interaktīvi noņemt visus failus, izņemot visus .zip
failus:
$ rm -i !(*.zip)
4. Pēc tam jūs varat izdzēst visus direktorijā esošos failus, izņemot visus .zip
un .odt
failus, parādot to, kas tiek darīts:
$ rm -v !(*.zip|*.odt)
Kad esat saņēmis visas nepieciešamās komandas, izslēdziet extglob apvalka opciju šādi:
$ shopt -u extglob
Dzēst failus, izmantojot Linux atrast komandu
Saskaņā ar šo metodi mēs varam izmantot komandu atrast tikai ar atbilstošām opcijām vai kopā ar komandu xargs, izmantojot cauruļvadu, kā norādīts zemāk esošajās formās:
$ 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. Šī komanda izdzēsīs visus failus, izņemot .gz
failus pašreizējā direktorijā:
$ find . -type f -not -name '*.gz'-delete
6. Izmantojot cauruļvadu un xargs, iepriekš minēto gadījumu varat modificēt šādi:
$ find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}
7. Apskatīsim vēl vienu piemēru. Tālāk esošā komanda iznīcinās visus failus, izņemot failus .gz
, .odt
un .jpg
. pašreizējā direktorijā:
$ find . -type f -not \(-name '*gz' -or -name '*odt' -or -name '*.jpg' \) -delete
Dzēst failus, izmantojot mainīgo Bash GLOBIGNORE
Šī pēdējā pieeja tomēr darbojas tikai ar bash. Šeit mainīgais GLOBIGNORE saglabā ar kolu atdalītu rakstu sarakstu (failu nosaukumus), kurus neņem vērā, paplašinot ceļa nosaukumu.
Lai izmantotu šo metodi, pārejiet uz direktoriju, kuru vēlaties sakopt, pēc tam iestatiet mainīgo GLOBIGNORE šādi:
$ cd test $ GLOBIGNORE=*.odt:*.iso:*.txt
Šajā gadījumā visi faili, kas nav faili .odt
, .iso
un .txt
, tiek noņemti no pašreizējā direktorija.
Tagad palaidiet komandu, lai iztīrītu direktoriju:
$ rm -v *
Pēc tam izslēdziet mainīgo GLOBIGNORE:
$ unset GLOBIGNORE
Piezīme. Lai saprastu iepriekš norādītajās komandās izmantoto karodziņu nozīmi, skatiet katras komandas rokasgrāmatas lapas, kuras esam izmantojuši dažādās ilustrācijās.
Tas ir viss! Ja jums ir kādas citas komandrindas metodes, kas domātas vienam un tam pašam mērķim, neaizmirstiet dalīties ar mums, izmantojot mūsu atsauksmju sadaļu.