Powershell ile dosya arama

Powershell ile dosya arama. Powershell dosya arama özelliğini kullanabilmemiz için ihtiyacımız olan komut aslında çok basit Get-Childitem önemli olan bu komutu aradığımız dosyayı en hızlı şekilde bulması için nasıl konfigüre edebileceğimiz.

Powershell hakkında detaylı bilgiye sahip değilseniz buradan tüm faydalı powershell yazılarıma ulaşabilirsiniz.

Bir dosyayı bilgisayarımda kaydettim ama bulamıyorum. Bulmak için Windows PowerShell’i kullanmanın bir yolu var mı?  Evet var ve windows explorerdan daha hızlı. Aslında shell den dosya arama powershell ile hayatımıza girmedi. Daha önceleri windows komut satırı aracından aşağıdaki komutla dosya arayabiliyorduk

Dir C:\*.* /s

fakat çok fazla işlevi yoktu. Powershell’de çok daha güçlü parametreler vererek tam aradığımız dosyaya çok kısa sürede ulaşmak mümkün.

Get-Childitem’i dosya ve dizinlerin bir listesini oldukça kolay bir şekilde göstermek için kullanabiliriz . Aşağıdaki örnek, C Sürücüsünün kökündeki tüm dosyaları listeler:

Get-Childitem –Path C:\

Bir –Recurse parametresi eklersek alt dosyalarda da  , erişimimiz olan her şeyi gösterebiliriz.

Get-Childitem –Path C:\ -Recurse

Powershell ile dosya arama

Peki neden PowerShell?

Arama için PowerShell kullanmak bizim gözden kaçırabileceğimiz her şeyi bize sunacaktır. Ama bu klasör yapısında, erişemediğim tüm dosyalar powershell aramasında bana hata olarak dönecektir hata olarak dönmesini istemiyorsam -ErrorAction parametresi belirlemeliyim.

Bu yüzden PowerShell’e, “Bana bu küçük hataları gösterme, sadece devam et” diyorum.

Get-Childitem –Path C:\ -Recurse -ErrorAction SilentlyContinue

Peki bunu bir arama aracı olarak nasıl kullanacağız? Get-Childitem ek parametreler içerir –Include ve –exclude. İşlevleri oldukça basit.

Include parametresi “aramasında sadece bu dosyaları bana göster” der ve -exclude ise bu dosyaları bana gösterme anlamına gelir.

Windows Temporary dosyası gizli bir klasör olduğu için, powershell bu bölümde normalde arama yapmaz. Eğer arayacağınız dosya temp altında olabilirse –force parametresini ekleyerek bu klasörleri de incelemesine izin verebilirsiniz..

Get-Childitem –Path C:\ -Recurse –force -ErrorAction SilentlyContinue

Artık bu komutu yalnızca erişebildiğim Word belgelerini veya aramak istediğim terimi koyduğum (Ali) göstermek için kullanabilirim.

Get-Childitem –Path C:\ -Include *Aliortul* -Recurse -ErrorAction SilentlyContinue

Bu komut ne yazık ki, her şeyi çeker, ne demek her şey. İçerisinde Ali geçen her klasör ve dosyayı ben klasörleri aramasını istemiyor sadece dosyaları aramasını istiyorsam -file parametresini ekleyerek bunu yapabilirim.

Get-Childitem –Path C:\ -Include *Aliortul* -File -Recurse -ErrorAction SilentlyContinue

Ayrıca -Exclude parametresini “Bana herhangi bir TMP, MP3 veya JPG dosyası gösterme:” demek için de kullanabilirim.

Get-Childitem –Path C:\ -Include *Aliortul* -Exclude *.JPG,*.MP3,*.TMP -File -Recurse -ErrorAction SilentlyContinue

Ve işte benim bilgisayarımdaki arama sonucu.

Powershell ile arama
Resim-1 Powershell arama

Powershell tarih aralığında arama

Farz edelim ki benim bilgisayarımda çok fazla dosya var istediğim dosyayı bu şekilde aramak çok uzun zaman alacak ve uzun yıllardır bu bilgisayarı kullanıyorum. Benim aradığım dosyayı daha hızlı bulmak için bir fikrim var bu dosyayı create ettiğim tarihi biliyorum tarih belirterek bu dosyayı arayabilir miyim? Yanıt yine evet. Örneğin powershell ile bir tarih aralığında dosyamızı aratacağız diyelim. Önce iki değişken atayarak başlangıç tarihi ve bitiş tarihini belirtiyorum. Başlangıç tarihine $tarihbasla bitiş tarihine ise $tarihbitir diyeceğim. ve Yıl -ay – gün olarak istediğim tarihi belirliyorum.

$tarihbasla = Get-Date -Year 2022 -Month 01 -Day 06
$tarihbitir = Get-Date -Year 2022 -Month 03 -Day 06

Tarih aralığımı da belirlediğime göre Artık yazmam gereken komut aşağıdaki gibi.

Get-ChildItem -Path C:\ -Include "Aliortul" -File -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -ge $tarihbasla -and $_.LastWriteTime -le $tarihbitir}

Powerhell dosya yolu (-Path) ile arama

Ya benim böyle şeylere ihtiyacım yok. Zaten dosyayı kaydettiğim yeri az çok biliyorum biliyorum, iki yerde olabilir, ama çok fazla dosya var. Gözle taramak yerine powershell hemen bulsun istiyorum var mı bir yolu? O en kolayı -Path parametresi ile yolu kendiniz belirleyebilirsiniz.

Get-Childitem -Path C:\Users, D:\Ali -Include "Aliortul" -Recurse 

Kaynak