Fayl yo'lini topish va filtrlash uchun glob namunasiga moslikni o'rganing. Sintaksis, amaliyotlar va turli tillar uchun misollarni bilib oling.
Glob namunasi bo'yicha moslik: Fayl yo'lini topish va filtrlash bo'yicha keng qamrovli qo'llanma
Dasturiy ta'minotni ishlab chiqish va tizim ma'muriyati dunyosida fayllarni samarali boshqarish va manipulyatsiya qilish asosiy talabdir. Glob namunasi bo'yicha moslik ko'rsatilgan namunalarga asoslanib fayllarni topish va filtrlashning kuchli va ixcham usulini ta'minlaydi. Ushbu maqola globbingning murakkabliklariga, uning sintaksisi, foydalanishi va turli dasturlash tillari va operatsion tizimlaridagi qo'llanilishini o'rganadi.
Glob namunasi bo'yicha moslik nima?
"Global" so'zining qisqartmasi bo'lgan Globbing – joker belgilar yordamida fayl nomlari va katalog yo'llarini moslashtirish uchun ishlatiladigan texnikadir. Murakkabroq va nozik naqsh moslashtirish imkoniyatlarini taqdim etuvchi muntazam iboralardan farqli o'laroq, globbing sodda va intuitiv naqsh ta'riflariga e'tibor qaratadi. U buyruq qatori interfeyslarida, shell skriptlarida va dasturlash tillarida ma'lum mezonlarga javob beradigan fayllar yoki kataloglar to'plamini aniqlash uchun keng qo'llaniladi.
Globbingning asosiy sintaksisi
Glob namunasi bo'yicha moslikning asosi uning joker belgilarida yotadi. Bu belgilar fayl yoki katalog nomidagi bir yoki bir nechta belgilarni ifodalash uchun qisqa yozuvni ta'minlaydi. Eng keng tarqalgan joker belgilar quyidagilarni o'z ichiga oladi:
*
(Yulduzcha): Nol yoki undan ko'p belgilarni moslashtiradi. Masalan,*.txt
".txt" bilan tugaydigan barcha fayllarni moslashtiradi.?
(So'roq belgisi): Aynan bitta belgini moslashtiradi.file?.txt
"file1.txt", "file2.txt" fayllarini moslashtiradi, lekin "file12.txt" ni emas.[]
(Kvadrat qavslar): Qavslar ichidagi har qanday bitta belgini moslashtiradi.file[1-3].txt
"file1.txt", "file2.txt" va "file3.txt" fayllarini moslashtiradi. Siz [a-z] yoki [A-Z] kabi belgilar diapazonini ham belgilashingiz mumkin.file[abc].txt
"filea.txt", "fileb.txt" va "filec.txt" fayllarini moslashtiradi.[^]
(Kvadrat qavslar ichidagi tepa belgi): Qavslar ichida bo'lmagan har qanday bitta belgini moslashtiradi.file[^1-3].txt
"file4.txt", "filea.txt" va hokazo fayllarni moslashtiradi, lekin "file1.txt", "file2.txt" yoki "file3.txt" fayllarini emas.{}
(Jingalak qavslar - universal qo'llab-quvvatlanmaydi): Bir nechta alternativalarni ko'rsatishga imkon beradi.file{1,2,3}.txt
file1.txt file2.txt file3.txt
ga teng. Buimage.{png,jpg,gif}
kabi murakkabroq namunalar uchun ham ishlatilishi mumkin.
Bu asosiy joker belgilar murakkabroq namunalarni yaratish uchun birlashtirilishi mumkin. Masalan, *.log.*
".log" bilan tugaydigan har qanday faylga mos keladi, undan keyin boshqa kengaytma keladi.
Turli dasturlash tillarida Globbing
Globbingning asosiy tushunchalari izchil bo'lib qolsa-da, turli dasturlash tillarida o'ziga xos implementatsiyalar va sintaksis biroz farq qilishi mumkin.
Python
Python glob namunalari bilan ishlash uchun glob
modulini taqdim etadi.
import glob
# Joriy katalogdagi barcha .txt fayllarni topish
txt_files = glob.glob("*.txt")
print(txt_files)
# 'images' nomli kichik katalogdagi barcha .jpg fayllarni topish
jpg_files = glob.glob("images/*.jpg")
print(jpg_files)
# Joriy katalog va uning kichik kataloglaridagi barcha .py fayllarni rekursiv ravishda topish
py_files = glob.glob("**/*.py", recursive=True)
print(py_files)
glob
modulining glob()
funksiyasi glob namunasini kiritish sifatida oladi va mos keladigan fayl yo'llari ro'yxatini qaytaradi. recursive=True
argumenti Python 3.5 da kiritilgan kichik kataloglar bo'ylab harakatlanishga imkon beradi.
Misol: Xalqaro (i18n) fayllar
Til kodi bo'yicha tashkil etilgan tarjima fayllariga ega bo'lgan loyihani tasavvur qiling, masalan, en.json
, fr.json
, de.json
. Barcha tarjima fayllarini topish uchun siz quyidagidan foydalanishingiz mumkin: glob.glob("*.json")
. Bu fayl nomlarida ishlatilgan til kodlaridan qat'i nazar, global ravishda ishlaydi.
JavaScript (Node.js)
Node.js da glob
paketi (npm orqali mavjud) globbing funksionalitetini ta'minlaydi.
const glob = require("glob");
// 'src' katalogidagi barcha .js fayllarni topish
glob("src/**/*.js", (err, files) => {
if (err) {
console.error(err);
return;
}
console.log(files);
});
Node.js dagi glob()
funksiyasi asinxron bo'lib, xato ob'ekti va mos keladigan fayl yo'llari massivini oladigan qayta qo'ng'iroq funksiyasini qabul qiladi. src/**/*.js
namunasi src
katalogi va uning kichik kataloglaridagi barcha .js
fayllarni rekursiv ravishda qidiradi.
Misol: Konfiguratsiya fayllarini topish
Ko'pgina JavaScript loyihalari .eslintrc.js
yoki webpack.config.js
kabi konfiguratsiya fayllaridan foydalanadi. Siz bu fayllarni tezda topish uchun globdan foydalanishingiz mumkin: glob("*.config.js")
.
Java
Java 7 java.nio.file
paketini taqdim etdi, u FileSystem.getPathMatcher()
metodi orqali globbingni qo'llab-quvvatlaydi.
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"; // Java fayllarini rekursiv qidirish
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("Topildi: " + file);
}
return FileVisitResult.CONTINUE;
}
});
}
}
Ushbu misol fayl tizimini ko'rib chiqish uchun Files.walkFileTree()
dan va har bir fayl ko'rsatilgan glob namunasiga mos kelishini tekshirish uchun PathMatcher
dan foydalanadi. glob:**/*.java
namunasi barcha .java
fayllarni rekursiv ravishda qidiradi.
Misol: Plagin fayllarini yuklash
Ma'lum bir katalogdan plaginlarni yuklaydigan Java ilovasini tasavvur qiling. Globbing plagin katalogidagi barcha JAR fayllarni topish uchun ishlatilishi mumkin: glob:plugins/*.jar
.
Shell Scripting (Bash)
Globbing Bash kabi shell skript tillariga chuqur integratsiyalashgan.
#!/bin/bash
# Joriy katalogdagi barcha .txt fayllarni topish
for file in *.txt;
do
echo "Topilgan fayl: $file"
done
# 'logs' katalogidagi 'report' bilan boshlanuvchi barcha fayllarni topish
for file in logs/report*;
do
echo "Topilgan hisobot: $file"
done
# '.conf' bilan tugaydigan barcha fayllarni rekursiv topish
shopt -s globstar #Globstar-ni yoqish
for file in **/*.conf;
do
echo "Topilgan konf fayli: $file"
done
Bashda glob namunalari buyruq bajarilishidan oldin shell tomonidan to'g'ridan-to'g'ri kengaytiriladi. globstar
opsiyasi (shopt -s globstar
) **
namunasi bilan rekursiv globbingni yoqadi.
Misol: Tizim ma'muriyati skriptlari Tizim ma'murlari ko'pincha skriptlarda log fayllarini, konfiguratsiya fayllarini yoki boshqa tizim resurslarini boshqarish uchun globbingdan foydalanadilar. Masalan, ma'lum bir sanadan eski barcha vaqtinchalik fayllarni o'chirish tegishli fayllarni aniqlash uchun globbingni o'z ichiga olishi mumkin.
Kengaytirilgan Globbing Usullari
Kengaytirilgan Globbing (Bash)
Bash yanada kuchli naqsh moslashtirish imkoniyatlarini taklif qiluvchi kengaytirilgan globbing funksiyalarini taqdim etadi. Bu funksiyalarni shopt
buyrug'i yordamida yoqish kerak.
#!/bin/bash
shopt -s extglob # Kengaytirilgan globbingni yoqish
# '.txt' bilan tugaydigan, lekin 'important.txt' deb nomlanmagan fayllarni moslashtirish
for file in !(important).txt;
do
echo "Topilgan fayl: $file"
done
# 'data' bilan boshlanuvchi, undan keyin bir yoki bir nechta raqam keladigan fayllarni moslashtirish
for file in data+([0-9]).txt;
do
echo "Topilgan fayl: $file"
done
Ba'zi foydali kengaytirilgan globbing namunalari:
?(pattern)
: Namuna nol yoki bir marta takrorlanganiga mos keladi.*(pattern)
: Namuna nol yoki undan ko'p marta takrorlanganiga mos keladi.+(pattern)
: Namuna bir yoki undan ko'p marta takrorlanganiga mos keladi.@(pattern1|pattern2|pattern3)
: Ko'rsatilgan namunalardan biriga mos keladi.!(pattern)
: Ko'rsatilgan namundan boshqa har qanday narsaga mos keladi.
Globbingni boshqa vositalar bilan birlashtirish
Globbing fayllarni manipulyatsiya qilishning murakkabroq vazifalarini bajarish uchun boshqa buyruq qatori vositalari bilan muammosiz birlashtirilishi mumkin.
# Barcha .txt fayllarni topish va 'error' so'zini qidirish uchun ro'yxatni grepga yo'naltirish
ls *.txt | grep "error"
# 7 kundan eski barcha .tmp fayllarni o'chirish uchun findni globbing bilan ishlatish
find . -name "*.tmp" -mtime +7 -delete
Birinchi misol barcha .txt
fayllarni ro'yxatlash uchun ls
dan foydalanadi va keyin "error" so'zini o'z ichiga olgan qatorlarni qidirish uchun chiqishni grep
ga yo'naltiradi. Ikkinchi misol barcha .tmp
fayllarni topish uchun -name
opsiyasi bilan find
dan va ularni o'chirishdan oldin 7 kundan eski fayllarni filtrlash uchun -mtime
opsiyasidan foydalanadi.
Globbing va muntazam iboralar
Globbing va muntazam iboralar naqsh moslashtirish uchun ishlatilsa-da, ular murakkabligi va imkoniyatlari bo'yicha sezilarli darajada farq qiladi.
Globbing:
- Sodda va intuitiv sintaksis.
- Asosan fayl nomini moslashtirish uchun ishlatiladi.
- Cheklangan joker belgilar to'plami.
- Oddiy namunalar uchun tezroq bajarish.
Muntazam iboralar:
- Metabelgilar va miqdorlovchilarning kengroq diapazoni bilan murakkabroq sintaksis.
- Faqat fayl nomlarida emas, balki har qanday matndagi namunalarni moslashtirish uchun ishlatilishi mumkin.
- Murakkab naqsh moslashtirish stsenariylari uchun kuchli va moslashuvchan.
- Muntazam iboralar dvigatelining ortiqcha yuklanishi tufayli oddiy namunalar uchun globbingdan sekinroq bo'lishi mumkin.
Umuman olganda, globbing oddiy fayl nomini moslashtirish vazifalari uchun mos keladi, muntazam iboralar esa murakkabroq matnni qayta ishlash va naqsh moslashtirish stsenariylari uchun yaxshiroqdir.
Glob namunasiga moslikdan foydalanish bo'yicha eng yaxshi amaliyotlar
- Aniq bo'ling: Kutilmagan fayllarga mos kelishi mumkin bo'lgan juda keng namunalardan saqlaning. Misol uchun,
*
o'rniga, faqat matn fayllarini nishonlash uchun*.txt
dan foydalaning. - Rekursiyadan ehtiyotkorlik bilan foydalaning: Rekursiv globbing (masalan,
**/*
) resurslarni ko'p talab qilishi mumkin, ayniqsa katta katalog tuzilmalarida. Rekursiv namunalardan foydalanishdan oldin ishlashga ta'sirini ko'rib chiqing. - Namunalaringizni sinab ko'ring: Glob namunalari asosida fayllarni o'zgartiradigan yoki o'chiradigan buyruqlarni ishga tushirishdan oldin, ularning kerakli fayllarga mos kelishiga ishonch hosil qilish uchun namunalarni sinab ko'ring. Natijalarni oldindan ko'rish uchun
ls
yokiecho
dan foydalaning. - Platformaga xos farqlarni tushuning: Turli operatsion tizimlar va shellarda globbing implementatsiyalaridagi nozik farqlardan xabardor bo'ling. Masalan, harf sezgirligi farq qilishi mumkin.
- Maxsus belgilarni qochiring: Agar siz tom ma'nodagi joker belgiga (masalan, yulduzcha) mos kelishingiz kerak bo'lsa, uni orqa chiziq (
\*
) yordamida qochiring.
Real hayotdagi misollar va foydalanish holatlari
- Vebni ishlab chiqish: Optimallashtirish uchun aktivlar katalogidagi barcha tasvir fayllarini (
.jpg
,.png
,.gif
) topish. - Ma'lumotlarni tahlil qilish:
data_2023-10-26.log
,data_2023-10-27.log
va hokazo nomli log fayllari seriyasini qayta ishlash. - Tizim ma'muriyati: Log fayllarini ma'lum bir sanadan eski fayllarni aniqlash va arxivlash orqali aylantirish.
- Qurishni avtomatlashtirish: Qurish jarayonida ma'lum fayllar yoki kataloglarni kiritish yoki chiqarib tashlash.
- Kod yaratish: Ma'lum namunalarga asoslanib kod yaratish uchun shablon fayllarini topish.
- Konfiguratsiyani boshqarish: Loyiha katalogidagi barcha konfiguratsiya fayllarini topish.
Xavfsizlik masalalari
Globbingdan foydalanganda, potentsial xavfsizlik xatarlarini yodda tutish juda muhimdir. Agar foydalanuvchi kiritmasi glob namunalarini qurish uchun ishlatilsa, u istalmagan faylga kirish yoki o'zgartirishga olib kelishi mumkin. Bu xatarlarni kamaytirish uchun:
- Foydalanuvchi kiritmasini tozalash: Yomon niyatli namunalarning oldini olish uchun glob namunalarida foydalanishdan oldin foydalanuvchi kiritmasini doimo tasdiqlang va tozalang.
- Kirishni cheklash: Globbing operatsiyasini ishga tushiradigan jarayon fayllarga kirish va ularni o'zgartirish uchun eng kam zarur imtiyozlarga ega ekanligiga ishonch hosil qiling.
- Xavfsiz alternativalardan foydalanish: Xavfsizlik ustuvor bo'lgan holatlarda, faqat globbingga tayanmasdan, ko'proq nazorat qilinadigan fayl tizimi API'laridan foydalanishni ko'rib chiqing.
Xulosa
Glob namunasi bo'yicha moslik fayl yo'lini topish va filtrlash uchun kuchli va ko'p qirrali vositadir. Uning oddiy sintaksisi va keng tarqalganligi uni dasturchilar, tizim ma'murlari va fayllar hamda kataloglar bilan ishlaydigan har bir kishi uchun muhim ko'nikmaga aylantiradi. Asosiy tushunchalarni, sintaksis farqlarini va eng yaxshi amaliyotlarni tushunib, siz ish oqimingizni soddalashtirish va fayllarni boshqarish vazifalarini samarali avtomatlashtirish uchun globbingdan foydalanishingiz mumkin. Shell skriptlari yozayotgan bo'lsangiz ham, ilovalar ishlab chiqayotgan bo'lsangiz ham yoki serverlarni boshqarayotgan bo'lsangiz ham, globbing fayl tizimi bilan o'zaro ishlashning ixcham va samarali usulini ta'minlaydi.