есть только файлы возврата 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

2

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

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

Golfed

dir -r -Attributes !D

-4

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

get-childitem -Recurse -include *.*

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


10
Это (о каталогах) не соответствует действительности. Ничто не может помешать вам иметь каталог с расширением
Ромео Нинов
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.