mają tylko pliki zwrotne Powershell get-childitem

76

Chciałbym rekurencyjnie korzystać z get-childitem, ale zwracaj tylko pliki, a nie katalogi. Najlepsze rozwiązanie, jakie mam, nie wydaje się naturalne:

gci . *.* -rec | where { $_.GetType().Name -eq "FileInfo" }
Frank Schwieterman
źródło

Odpowiedzi:

76

Spróbuj tego:

gci . *.* -rec | where { ! $_.PSIsContainer }
Andy
źródło
4
jeśli wykluczasz kontenery, możesz pominąć *. *, dobrze?
MDMoore313,
99

W Powershell 3.0 jest to prostsze,

gci -Directory #List only directories
gci -File #List only files

To jest jeszcze krótsze,

gci -ad # alias for -Directory
gci -af # alias for -File
iraSenthil
źródło
2

W PowerShell 3.0 możesz także użyć nowo dodanego -Attributesparametru
(wraz z operatorami logicznymi)

Get-ChildItem -Recurse -Attributes !Directory+!System

Grał w golfa

dir -r -Attributes !D
nixda
źródło
-4

W PowerShell 2.0 najlepszym i najprostszym rozwiązaniem, jakie wymyśliłem, jest dołączenie wszystkich plików z rozszerzeniem:

get-childitem -Recurse -include *.*

foldery nie mają rozszerzenia, więc są wykluczone, uważaj na pliki o nazwach rozszerzeń.

David Gacías Lacruz
źródło
10
To (o katalogach) nie jest prawdą. Nic nie powstrzyma cię od posiadania katalogu z rozszerzeniem
Romeo Ninov