PowerShell'de dosyaları yinelemeli olarak nasıl arayabilirim?
Bir dizin ve alt dizinlerdeki dosyaları mı aramaya çalışıyorsunuz? PowerShell bunu kolaylaştırdı. Bu eğitimde size PowerShell'de dosyaları yinelemeli olarak nasıl arayacağınızı açıklayacağım.
PowerShell'de dosyaları yinelemeli olarak aramak için Get-ChildItem cmdlet'ini -Recurse parametresiyle birlikte kullanın. Örneğin, bir klasördeki ve alt klasörlerindeki tüm .txt dosyalarını bulmak için Get-ChildItem -Path “C:\YourFolder” -Recurse -Filter *.txt komutunu kullanın. Bu komut, tüm alt dizin düzeylerini geçerek belirtilen dizindeki tüm .txt dosyalarını listeler.
PowerShell'de dosyaları yinelemeli olarak arayın
Şimdi size farklı yöntemler kullanarak PowerShell'de dosyaları yinelemeli olarak nasıl arayacağınızı göstereyim.
Yöntem 1: Get-ChildItem'i Kullanma
Get-ChildItem cmdlet'i, belirtilen bir veya daha fazla konumdaki öğeleri listelemek için başvurulacak komuttur. -Recurse parametresi ile birleştirildiğinde dizinler ve alt dizinleri arasında arama yapabilir. .txt uzantılı tüm dosyaları yinelemeli olarak bulmak için Get-ChildItem'in nasıl kullanılacağına dair temel bir örnek:
Get-ChildItem -Path C:\MyFolder -Recurse -Filter *.txt
Bu komut 'Klasörüm'deki ve tüm alt klasörlerindeki tüm metin dosyalarını listeleyecektir. Ancak, son 7 gün içinde değiştirilen dosyaları aramak gibi daha fazla koşul eklemek isterseniz sonuçları Where-Object cmdlet'ine aktarabilirsiniz:
Get-ChildItem -Path C:\MyFolder -Recurse -Filter *.txt | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) }Yöntem 2: -Include ve -Exclude Parametrelerini Kullanma
Aramanızı hassaslaştırmak için Get-ChildItem ayrıca -Include ve -Exclude parametrelerini de destekler. Bu parametreler, arama sonuçlarına dahil edilecek veya arama sonuçlarından hariç tutulacak kalıpları belirtmenize olanak tanır. Örneğin, dosya adında 'arşiv' içerenleri hariç tutarak tüm .log dosyalarını aramak için şunları kullanabilirsiniz:
Get-ChildItem -Path C:\Logs -Recurse -Include *.log -Exclude *archive*Bu komut, 'Logs' dizinindeki günlük dosyalarını yinelemeli olarak arayacak ve adlarında 'arşiv' olanları atlayacaktır.
Yöntem 3: İçerik Aramaları için Select-String ile Birleştir
Bazen belirli bir metni içeren dosyaları aramanız gerekir. Select-String'in devreye girdiği yer burasıdır ve dosya içeriğindeki dizeleri eşleştirmenize olanak tanır. İşte 'hata' kelimesini içeren dosyaları arayan örnek bir komut dosyası:
Get-ChildItem -Path C:\Logs -Recurse -File | Select-String -Pattern "error" | Select-Object -Unique PathBu komut dosyası, 'Günlükler'deki dosyaları yinelemeli olarak listeler, her dosyayı 'hata' kelimesi için tarar ve ardından kaç eşleşme olduğuna bakılmaksızın her dosya yolunu yalnızca bir kez çıkarır.
Yöntem 4: Komut Dosyası Bloklarıyla Gelişmiş Filtreleme
Daha karmaşık aramalar için gelişmiş filtreler oluşturmak amacıyla komut dosyası bloklarını kullanabilirsiniz. Bu yaklaşım, arama kriterleri üzerinde yüksek düzeyde kontrol sağlar. Aşağıda PowerShell'de 1 MB'tan büyük tüm dosyaları bulan bir komut dosyası bulunmaktadır:
Get-ChildItem -Path C:\Data -Recurse | Where-Object { $_.Length -gt 1MB }Bu komut, 'Veri'den boyutu 1 MB'ı aşan dosyaları döndürecektir.
Yöntem 5: Desen Genişletme için Resolve-Path Cmdlet'ini Kullanma
Eğer karmaşık yol modelleri ile uğraşıyorsanız, Resolve-Path bir arama yapmadan önce bunların genişletilmesine yardımcı olabilir. Get-ChildItem ile birlikte şu şekilde kullanabilirsiniz:
Resolve-Path "C:\Projects\*\*.config" | ForEach-Object { Get-ChildItem -Path $_.Path -Recurse }Bu komut dosyası, 'Projeler'in herhangi bir alt dizinindeki tüm .config dosyalarını bulmak için joker karakter desenini genişletir.
Yöntem 6: Yeniden Kullanılabilirlik için Özel İşlevler Oluşturun
Bunu yeniden kullanmak istiyorsanız PowerShell'de özel bir işlev oluşturabilirsiniz. Aşağıda yeniden kullanım için arama mantığını kapsayan temel bir işlev bulunmaktadır:
function Find-FilesRecursively {
param(
[string]$Path,
[string]$Pattern
)
Get-ChildItem -Path $Path -Recurse -Filter $Pattern
}
# Usage
Find-FilesRecursively -Path C:\Documents -Pattern *.pdf
Bu işlev, hızlı erişim için PowerShell profilinize eklenebilir ve gerektiğinde farklı yollar ve kalıplarla çağrılabilir.
Çözüm
Umarım artık çeşitli yöntemler kullanarak PowerShell'de dosyaları yinelemeli olarak nasıl arayacağınızı öğrenmişsinizdir.
