есть только файлы возврата Powershell get-childitem

76

Я хотел бы использовать get-childitem рекурсивно, но только чтобы он возвращал файлы, а не каталоги. Лучшее решение, которое у меня есть, просто не кажется естественным:

gci . *.* -rec | where { $_.GetType().Name -eq "FileInfo" }
Фрэнк Швитерман
источник

Ответы:

76

Попробуй это:

gci . *.* -rec | where { ! $_.PSIsContainer }
Энди
источник
4
если вы исключаете контейнеры, то можете не указывать *. *, правильно?
MDMoore313
100

В Powershell 3.0 это проще,

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

Это еще короче,

gci -ad # alias for -Directory
gci -af # alias for -File
iraSenthil
источник
2

В PowerShell 3.0 вы также можете использовать только что добавленный -Attributesпараметр
(вместе с логическими операторами)

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

Golfed

dir -r -Attributes !D
nixda
источник
-4

В PowerShell 2.0 лучшее и простое решение, которое я придумал, - включить все файлы с расширением:

get-childitem -Recurse -include *.*

папки не имеют расширения, поэтому они исключены, остерегайтесь файлов с именами без расширения.

Дэвид Гасиас Лакрус
источник
10
Это (о каталогах) не соответствует действительности. Ничто не может помешать вам иметь каталог с расширением
Ромео Нинов