используйте get-childitem -recurse в powershell, но получите каждый полный путь в отдельной строке (без дополнительных строк каталога) - PullRequest
2 голосов
/ 03 февраля 2020

Если я выполню, например,

Get-ChildItem *.ext -recurse 

, вывод состоит из серии Справочника: записи, за которыми следует по одной записи для каждого соответствующего файла. Это полезно для многих целей, но сегодня я хотел бы получить результат (аналогичный команде Unix find), в котором каждый соответствующий файл появляется в отдельной строке и показывает свой полный относительный путь (и никаких других строк не появляется).

Я немного искал, но не нашел решения.

Ответы [ 4 ]

1 голос
/ 03 февраля 2020

Get-ChildItem -Name делает то, что вы хотите:

  • Он выводит относительные пути (возможно, включая поддиректории компонентов) из соответствующих файлов в виде строк (тип [string]).
# Lists file / dir. paths as *relative paths* (strings).
# (relative to the input dir, which is implicitly the current one here).
Get-ChildItem -Filter *.ext -Recurse -Name

Обратите внимание, что я использовал -Filter, что значительно ускоряет обход.

Предупреждение : Начиная с PowerShell 7.0, -Name страдает от проблем с производительностью и поведенческих ошибок; см. следующие выпуски GitHub:

1 голос
/ 03 февраля 2020

Get-Childitem по умолчанию выводит представление для таблицы формата, определенной где-то в файле формата xml.

get-childitem | format-table
get-childitem | format-list *

показывает фактические свойства выводимых объектов. См. Также Как просмотреть все свойства объекта PowerShell . Тогда вы можете выбрать те, которые вы хотите. Это даст полный путь:

get-childitem | select fullname

Если вы хотите, чтобы вывод был просто строкой, а не объектом:

get-childitem | select -expand fullname
get-childitem | foreach fullname
1 голос
/ 03 февраля 2020

Resolve-Path с переключателем -Relative может использоваться для отображения относительных путей набора путей. Вы можете получить полные пути (свойство FullName) из команды Get-ChildItem и использовать оператор доступа к элементу ., чтобы получить только значения пути.

Resolve-Path -Path (Get-ChildItem -Filter *.ext -Recurse).FullName -Relative

Примечание: Относительные пути здесь только точно отражают файлы, найденные в текущем каталоге (Get-ChildItem -Path .), то есть Get-ChildItem -Path NotCurrentDirectory может привести к нежелательным результатам.

0 голосов
/ 03 февраля 2020

Спасибо за различные предложения. Мне любопытно, что некоторые из них приводят к пустым выводам в моем Powershell (PSVersion: 5.1.18362.145).

Я попробовал некоторые из них и, вдохновленный некоторыми из них, нашел лучший ответ для моего случая на данный момент:

Get-ChildItem * .ext -recurse | Select-Object -property fullname

(Когда я сделал окно достаточно широким, я получил всю необходимую информацию; в общем, я полагаю, что мне может потребоваться сделать больше, чтобы получить желаемое форматирование.)

...