Как удалить все скрытые ненужные каталоги из дерева? - PullRequest
1 голос
/ 08 мая 2019

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

Я надеюсь на достаточно простое решение для начинающего, чтобы легко понять и извлечь уроки. Я знаю команды Get-ChildItem и Remove-Item, но я пока не понимаю, как связать / передать их с переменными нового типа.

Ответы [ 3 ]

3 голосов
/ 08 мая 2019
Get-ChildItem -Force -Recurse -Directory -Filter .unwanted |
  Remove-Item -Force -Recurse -WhatIf

-WhatIf превью удаление;удалите его, чтобы выполнить фактическое удаление.

  • -Force необходимо для нацеливания на скрытые элементы (и, в случае Remove-Item в Windows, для переопределения *Атрибут 1013 * (только для чтения), если разрешен).

  • -Recurse необходим для поиска каталогов во всем поддереве (Get-ChildItem) и для удаления непустых каталогов (Remove-Item) без запроса подтверждения.

В качестве отступления: использование -Filter - наиболее эффективный способ найти интересующие каталоги, поскольку он фильтрует по источнику, тогда как(подразумевается) использование -Path заставит PowerShell сначала перечислять все каталоги, а затем фильтровать.

1 голос
/ 08 мая 2019

Предоставленный код Bash можно перевести на следующий код:

Get-Childitem *unwanted* -Recurse | Remove-Item -Confirm:$false -ErrorAction SilentlyContinue

В зависимости от разрешений вам может потребоваться использовать параметр -Force для второй команды. Я бы также предложил провести некоторые исследования и тестирование этих команд, прежде чем использовать их в любой производственной среде. Вещи могут стать опасными :)

Я также оставлю хорошую статью о конвейерах PowerShell здесь

0 голосов
/ 08 мая 2019

Вы можете попробовать что-то подобное в зависимости от ваших требований -

Get-ChildItem -path \\PathToYourFolder\ -recurse | where {$_.PSIsContainer -eq $true -and $_.Name -eq ".unwanted"} | Remove-Item

Проще говоря, конвейер PowerShell принимает вывод cmdlets с левой стороны и передает его как вход cmdlets с правой стороны.

Команда where {$_.PSIsContainer -eq $true использует свойство PsIsContainer всех объектов файловой системы для выбора только папок, имеющих значение True ($ true) в свойстве PsIsContainer.

...