Avastage globi mustrite sobitamine failiteede tõhusaks leidmiseks ja filtreerimiseks. Õppige süntaksit, parimaid tavasid ja reaalseid näiteid erinevate programmeerimiskeelte ja operatsioonisüsteemide jaoks.
Globi mustrite sobitamine: põhjalik juhend failiteede leidmiseks ja filtreerimiseks
Tarkvaraarenduse ja süsteemihalduse maailmas on failide tõhus haldamine ja manipuleerimine fundamentaalne nõue. Globi mustrite sobitamine pakub võimsa ja kokkuvõtliku viisi failide leidmiseks ja filtreerimiseks vastavalt määratud mustritele. See artikkel süveneb globaalsuse keerukustesse, uurides selle süntaksit, kasutust ja rakendusi erinevates programmeerimiskeeltes ja operatsioonisüsteemides.
Mis on globi mustrite sobitamine?
Globaalsus, lühend sõnast "global", on tehnika, mida kasutatakse failinimede ja kataloogiteede sobitamiseks metamärkide abil. Erinevalt regulaaravaldistest, mis pakuvad keerukamaid ja nüansirikkamaid mustrite sobitamise võimalusi, keskendub globaalsus lihtsatele ja intuitiivsetele mustrite definitsioonidele. Seda kasutatakse tavaliselt käsurealiidestes, shelliskriptides ja programmeerimiskeeltes, et tuvastada failide või kataloogide kogumeid, mis vastavad konkreetsetele kriteeriumitele.
Globaalsuse põhisüntaks
Globi mustrite sobitamise tuum peitub selle metamärkides. Need märgid pakuvad stenograafilist tähistust ühe või mitme märgi esitamiseks faili või kataloogi nimes. Kõige tavalisemad metamärgid on:
*
(tärn): Sobitab null või rohkem märke. Näiteks*.txt
sobitab kõik failid, mis lõpevad ".txt"-ga.?
(küsimärk): Sobitab täpselt ühe märgi.file?.txt
sobitab "file1.txt", "file2.txt", aga mitte "file12.txt".[]
(nurksulud): Sobitab mis tahes üksiku märgi sulgude sees.file[1-3].txt
sobitab "file1.txt", "file2.txt" ja "file3.txt". Samuti saate määrata tähemärkide vahemikke nagu [a-z] või [A-Z].file[abc].txt
sobitab "filea.txt", "fileb.txt" ja "filec.txt".[^]
(katus nurksulgude sees): Sobitab mis tahes üksiku märgi, mis ei ole sulgude sees.file[^1-3].txt
sobitaks "file4.txt", "filea.txt" jne, aga mitte "file1.txt", "file2.txt" või "file3.txt".{}
(looksulud – pole universaalselt toetatud): Võimaldab määrata mitu alternatiivi.file{1,2,3}.txt
on samaväärnefile1.txt file2.txt file3.txt
. Seda saab kasutada ka keerukamate mustrite jaoks naguimage.{png,jpg,gif}
.
Neid põhilisi metamärke saab kombineerida keerukamate mustrite loomiseks. Näiteks *.log.*
sobitaks iga faili, mis lõpeb ".log"-ga, millele järgneb mis tahes muu laiendus.
Globaalsus erinevates programmeerimiskeeltes
Kuigi globaalsuse põhimõisted jäävad samaks, võivad konkreetsed rakendused ja süntaks pisut erineda erinevates programmeerimiskeeltes.
Python
Python pakub glob
moodulit globi mustritega töötamiseks.
import glob
# Leia kõik .txt failid praeguses kataloogis
txt_files = glob.glob("*.txt")
print(txt_files)
# Leia kõik .jpg failid alamkataloogis nimega 'images'
jpg_files = glob.glob("images/*.jpg")
print(jpg_files)
# Leia rekursiivselt kõik .py failid praeguses kataloogis ja selle alamkataloogides
py_files = glob.glob("**/*.py", recursive=True)
print(py_files)
glob
mooduli funktsioon glob()
võtab sisendina globi mustri ja tagastab sobituvate failiteede loendi. Argument recursive=True
võimaldab läbida alamkatalooge, funktsiooni, mis võeti kasutusele Python 3.5-s.
Näide: Rahvusvahelistamise (i18n) failid
Kujutage ette projekti, kus tõlkefailid on korraldatud keelekoodi järgi, nt en.json
, fr.json
, de.json
. Kõigi tõlkefailide leidmiseks võite kasutada: glob.glob("*.json")
. See töötab globaalselt, olenemata failinimedes kasutatud konkreetsetest keelekoodidest.
JavaScript (Node.js)
Node.js-is pakub glob
pakett (saadaval npm kaudu) globaalsuse funktsionaalsust.
const glob = require("glob");
// Leia kõik .js failid kataloogis 'src'
glob("src/**/*.js", (err, files) => {
if (err) {
console.error(err);
return;
}
console.log(files);
});
Node.js-i funktsioon glob()
on asünkroonne ja võtab vastu tagasihelistamisfunktsiooni, mis saab veateate objekti ja sobituvate failiteede massiivi. Muster src/**/*.js
otsib rekursiivselt kõiki .js
faile kataloogis src
ja selle alamkataloogides.
Näide: Konfiguratsioonifailide leidmine
Paljud JavaScripti projektid kasutavad konfiguratsioonifaile nagu .eslintrc.js
või webpack.config.js
. Nende failide kiireks leidmiseks saate kasutada globi: glob("*.config.js")
.
Java
Java 7 tutvustas paketti java.nio.file
, mis sisaldab tuge globaalsusele meetodi FileSystem.getPathMatcher()
kaudu.
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
public class GlobExample {
public static void main(String[] args) throws IOException {
Path startingDir = Paths.get(".");
String pattern = "glob:**/*.java"; // Rekursiivne otsing Java failide jaoks
PathMatcher matcher = FileSystems.getDefault().getPathMatcher(pattern);
Files.walkFileTree(startingDir, new SimpleFileVisitor() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (matcher.matches(file)) {
System.out.println("Found: " + file);
}
return FileVisitResult.CONTINUE;
}
});
}
}
See näide kasutab Files.walkFileTree()
failisüsteemi läbimiseks ja PathMatcher
-it, et kontrollida, kas iga fail vastab määratud globi mustrile. Muster glob:**/*.java
otsib rekursiivselt kõiki .java
faile.
Näide: Pluginifailide laadimine
Kujutage ette Java rakendust, mis laadib pluginaid kindlast kataloogist. Globaalsust saab kasutada kõigi JAR-failide leidmiseks pluginakataloogis: glob:plugins/*.jar
.
Shelliskriptimine (Bash)
Globaalsus on sĂĽgavalt integreeritud shelliskriptimiskeeltesse nagu Bash.
#!/bin/bash
# Leia kõik .txt failid praeguses kataloogis
for file in *.txt;
do
echo "Found file: $file"
done
# Leia kõik failid, mis algavad sõnaga 'report' kataloogis 'logs'
for file in logs/report*;
do
echo "Found report: $file"
done
#Rekursiivselt leia kõik failid, mis lõppevad '.conf'
shopt -s globstar #Luba globstar
for file in **/*.conf;
do
echo "Found conf file: $file"
done
Bashis laiendavad shellid globi mustreid otse enne käsu käivitamist. Valik globstar
(shopt -s globstar
) võimaldab rekursiivset globaalsust mustriga **
.
Näide: Süsteemihaldusskriptid Süsteemiadministraatorid kasutavad sageli globaalsust skriptides logifailide, konfiguratsioonifailide või muude süsteemiressursside haldamiseks. Näiteks võib teatud kuupäevast vanemate ajutiste failide kustutamine hõlmata globaalsust, et tuvastada asjakohased failid.
Globaalsuse täiustatud tehnikad
Laiendatud globaalsus (Bash)
Bash pakub laiendatud globaalsuse funktsioone, mis pakuvad võimsamaid mustrite sobitamise võimalusi. Need funktsioonid tuleb lubada käsuga shopt
.
#!/bin/bash
shopt -s extglob # Luba laiendatud globaalsus
# Sobita faile, mis lõppevad .txt-ga, kuid EI OLE nimega 'important.txt'
for file in !(important).txt;
do
echo "Found file: $file"
done
# Sobita faile, mis algavad sõnaga 'data', millele järgneb üks või mitu numbrit
for file in data+([0-9]).txt;
do
echo "Found file: $file"
done
Mõned kasulikud laiendatud globaalsuse mustrid:
?(pattern)
: Sobitab null või üks kord mustrit.*(pattern)
: Sobitab null või rohkem kordi mustrit.+(pattern)
: Sobitab üks või rohkem kordi mustrit.@(pattern1|pattern2|pattern3)
: Sobitab ühte määratud mustritest.!(pattern)
: Sobitab kõike, välja arvatud määratud muster.
Globaalsuse kombineerimine muude tööriistadega
Globaalsust saab sujuvalt integreerida teiste käsureatööriistadega, et teostada keerukamaid failide manipuleerimise ülesandeid.
# Leia kõik .txt failid ja suuna loend grepi, et otsida sõna 'error'
ls *.txt | grep "error"
# Kasuta find-i koos globaalsusega, et kustutada kõik .tmp failid, mis on vanemad kui 7 päeva
find . -name "*.tmp" -mtime +7 -delete
Esimene näide kasutab ls
kõigi .txt
failide loetlemiseks ja seejärel suunab väljundi grep
-i, et otsida ridu, mis sisaldavad sõna "error". Teine näide kasutab find
-i koos valikuga -name
kõigi .tmp
failide leidmiseks ja valikuga -mtime
, et filtreerida faile, mis on vanemad kui 7 päeva, enne nende kustutamist.
Globaalsus vs. Regulaaravaldised
Kuigi nii globaalsust kui ka regulaaravaldisi kasutatakse mustrite sobitamiseks, erinevad need märkimisväärselt oma keerukuse ja võimaluste poolest.
Globaalsus:
- Lihtne ja intuitiivne sĂĽntaks.
- Kasutatakse peamiselt failinimede sobitamiseks.
- Piiratud hulk metamärke.
- Kiirem täitmine lihtsate mustrite puhul.
Regulaaravaldised:
- Keerukam sĂĽntaks laiemate meta- ja kvantifikaatorite valikuga.
- Saab kasutada mustrite sobitamiseks mis tahes tekstis, mitte ainult failinimedes.
- Võimas ja paindlik keerukate mustrite sobitamise stsenaariumide korral.
- Võib olla lihtsate mustrite puhul aeglasem kui globaalsus regulaaravaldise mootori lisakoormuse tõttu.
Üldiselt sobib globaalsus lihtsate failinimede sobitamise ülesannete jaoks, samas kui regulaaravaldised sobivad paremini keerukama tekstitöötluse ja mustrite sobitamise stsenaariumide jaoks.
Parimad tavad globi mustrite sobitamise kasutamiseks
- Ole konkreetne: Vältige liiga laiu mustreid, mis võivad sobitada soovimatuid faile. Näiteks kasutage
*
asemel*.txt
, et sihtida ainult tekstifaile. - Kasutage rekursiooni ettevaatlikult: Rekursiivne globaalsus (nt
**/*
) võib olla ressursimahukas, eriti suurtes kataloogistruktuurides. Enne rekursiivsete mustrite kasutamist kaaluge jõudluse mõju. - Testige oma mustreid: Enne käskude käivitamist, mis muudavad või kustutavad faile globi mustrite alusel, testige mustreid, et tagada nende vastavus soovitud failidele. Kasutage tulemuste eelvaateks
ls
võiecho
. - Mõistke platvormispetsiifilisi erinevusi: Olge teadlik globaalsuse rakenduste peentest erinevustest erinevates operatsioonisüsteemides ja shellides. Näiteks võib tõusutundlikkus erineda.
- Escape erimärke: Kui teil on vaja sobitada literaalset metamärki (nt tärni), siis escape see tagurpidikriipsuga (
\*
).
Reaalsed näited ja kasutusjuhud
- Veebiarendus: Kõigi pildifailide (
.jpg
,.png
,.gif
) leidmine varade kataloogis optimeerimiseks. - Andmeanalüüs: Logifailide seeria töötlemine nimedega nagu
data_2023-10-26.log
,data_2023-10-27.log
jne. - Süsteemihaldus: Logifailide roteerimine, tuvastades ja arhiveerides faile, mis on vanemad kui teatud kuupäev.
- Ehitusautomaatika: Teatud failide või kataloogide kaasamine või välistamine ehitusprotsessi ajal.
- Koodi genereerimine: Mallifailide leidmine koodi genereerimiseks teatud mustrite alusel.
- Konfiguratsioonihaldus: Kõigi konfiguratsioonifailide leidmine projektikataloogis.
Turvalisuse kaalutlused
Globaalsuse kasutamisel on oluline olla teadlik potentsiaalsetest turvariskidest. Kui globi mustrite koostamiseks kasutatakse kasutaja sisendit, võib see kaasa tuua tahtmatu failidele juurdepääsu või nende muutmise. Nende riskide maandamiseks:
- Puhastage kasutaja sisend: Enne selle kasutamist globi mustrites valideerige ja puhastage alati kasutaja sisend, et vältida pahatahtlikke mustreid.
- Piirake juurdepääsu: Veenduge, et globaalsuse toimingut käitaval protsessil oleks failidele juurdepääsuks ja nende muutmiseks vähim vajalik privileeg.
- Kasutage turvalisi alternatiive: Olukordades, kus turvalisus on ülimalt tähtis, kaaluge rohkem kontrollitud failisüsteemi API-de kasutamist, selle asemel et tugineda ainult globaalsusele.
Järeldus
Globi mustrite sobitamine on võimas ja mitmekülgne tööriist failiteede leidmiseks ja filtreerimiseks. Selle lihtne süntaks ja laialdane kättesaadavus muudavad selle oluliseks oskuseks arendajatele, süsteemiadministraatoritele ja kõigile, kes töötavad failide ja kataloogidega. Mõistes põhimõisteid, süntaksivariatsioone ja parimaid tavasid, saate globaalsust kasutada oma töövoo sujuvamaks muutmiseks ja failihaldusülesannete tõhusaks automatiseerimiseks. Olenemata sellest, kas kirjutate shelliskripte, arendate rakendusi või haldate servereid, pakub globaalsus kokkuvõtliku ja tõhusa viisi failisüsteemiga suhtlemiseks.