3 Mga Paagi sa Pagtangtang sa Tanan nga mga File sa Direktoryo Gawas sa Usa o Pipila ka mga File nga adunay mga Extension


Usahay moabut ka sa usa ka sitwasyon diin kinahanglan nimo nga tangtangon ang tanan nga mga file sa usa ka direktoryo o yano nga paglimpyo sa usa ka direktoryo pinaagi sa pagtangtang sa tanan nga mga file gawas sa mga file sa usa ka gihatag nga tipo (natapos sa usa ka partikular nga extension).

Niini nga artikulo, ipakita namo kanimo kung unsaon pagtangtang sa mga file sa usa ka direktoryo gawas sa pipila ka mga extension sa file o mga tipo gamit ang rm, find ug globignore nga mga sugo.

Sa dili pa kita mopadayon, magsugod kita pinaagi sa usa ka mubo nga pagtan-aw sa usa ka importante nga konsepto sa Linux - ang filename pattern matching, nga makapahimo kanato sa pag-atubang sa atong problema.

Sa Linux, ang usa ka pattern sa kabhang usa ka hilo nga gilangkoban sa mosunod nga mga espesyal nga karakter, nga gitawag nga mga wildcard o metacharacter:

  1. * – motakdo sa zero o daghan pang karakter
  2. ? – mohaum sa bisan unsa nga karakter
  3. [seq] – mohaum sa bisan unsang karakter sa seq
  4. [!seq] – motakdo sa bisan unsang karakter nga wala sa seq

Adunay tulo ka posible nga mga pamaagi nga atong susihon dinhi, ug kini naglakip sa:

Pagtangtang sa mga File Gamit ang Extended Pattern Matching Operators

Ang lain-laing gipalapad nga pattern matching operators gilista sa ubos, diin ang pattern-list usa ka lista nga adunay usa o daghan pa nga mga filename, gibulag gamit ang | nga karakter:

  1. *(pattern-list) – motakdo sa zero o daghan pang mga panghitabo sa gipiho nga mga pattern
  2. ?(pattern-list) – motakdo sa zero o usa ka panghitabo sa gipiho nga mga pattern
  3. +(listahan sa pattern) – mohaum sa usa o daghan pang mga panghitabo sa gipiho nga mga pattern
  4. @(pattern-list) – mohaum sa usa sa gipiho nga pattern
  5. !(pattern-list) – motakdo sa bisan unsa gawas sa usa sa gihatag nga pattern

Aron magamit kini, i-enable ang extglob shell option sama sa mosunod:

# shopt -s extglob

1. Aron mapapas ang tanang mga file sa usa ka direktoryo gawas sa ngalan sa file, i-type ang sugo sa ubos:

$ rm -v !("filename")

2. Aron papason ang tanang mga file gawas sa filename1 ug filename2:

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

3. Ang pananglitan sa ubos nagpakita kon unsaon pagtangtang sa tanang file gawas sa tanang .zip file nga interactive:

$ rm -i !(*.zip)

4. Sunod, mahimo nimong papason ang tanan nga mga file sa usa ka direktoryo gawas sa tanan nga .zip ug .odt nga mga file sama sa mosunod, samtang gipakita kung unsa ang gibuhat:

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

Kung naa na nimo ang tanan nga gikinahanglan nga mga sugo, i-off ang opsyon sa extglob shell sama niini:

$ shopt -u extglob

Pagtangtang sa mga File Gamit ang Linux find Command

Ubos niini nga pamaagi, mahimo natong gamiton ang find command nga eksklusibo sa angay nga mga opsyon o inubanan sa xargs command pinaagi sa paggamit sa pipeline sama sa mga porma sa ubos:

$ 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. Ang mosunod nga sugo mopapas sa tanang files gawas sa .gz files sa kasamtangang direktoryo:

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

6. Gamit ang pipeline ug xargs, mahimo nimong usbon ang kaso sa ibabaw sama sa mosunod:

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

7. Atong tan-awon ang usa ka dugang nga pananglitan, ang sugo sa ubos mopapas sa tanang mga file walay labot ang .gz, .odt, ug .jpg files sa kasamtangan nga direktoryo:

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

Pagtangtang sa mga File Gamit ang Bash GLOBIGNORE Variable

Kini nga katapusan nga pamaagi bisan pa, magamit ra sa bash. Dinhi, ang GLOBIGNORE variable nagtipig usa ka lista sa pattern nga gibulag sa colon (mga ngalan sa file) nga dili tagdon pinaagi sa pagpalapad sa pathname.

Aron magamit kini nga pamaagi, balhin sa direktoryo nga gusto nimong limpyohan, dayon itakda ang variable nga GLOBIGNORE ingon sa mosunod:

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

Niining higayona, ang tanan nga mga file gawas sa .odt, .iso, ug .txt nga mga file nga tangtangon gikan sa kasamtangan nga direktoryo.

Karon pagdagan ang mando aron limpyohan ang direktoryo:

$ rm -v *

Pagkahuman, i-off ang GLOBIGNORE variable:

$ unset GLOBIGNORE

Pahinumdom: Aron masabtan ang kahulogan sa mga bandera nga gigamit sa mga sugo sa ibabaw, tan-awa ang mga panid sa tawo sa matag sugo nga atong gigamit sa lain-laing mga ilustrasyon.

Kanang tanan! Kung naa kay lain pang mga pamaagi sa command line sa hunahuna para sa parehas nga katuyoan, ayaw kalimti ang pagpaambit kanamo pinaagi sa among seksyon sa feedback sa ubos.