Главная > Powershell > Поиск пустых каталогов

Поиск пустых каталогов

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

Как и в предыдущем случае нужно задать путь для поиска, по умолчанию скрипт будет искать пустые каталоги в заданном каталоге и всех его подкаталогах:

param
(
    [string]$path = $null
)

# Если путь не задан ищем в текущем каталоге
if (!$path)
{
    $path = Get-Location
    Write-Warning "Путь не задан, по умолчанию используется текущий путь: $path"
}

В скрипте присутствует рекурсивно вызываемая функция, которая работает следующим образом:

  • Вначале для заданного каталога проверяется наличие в нём подкаталогов;
  • Если есть подкаталоги для каждого вызывается эта же функция;
  • Если подкаталогов нет, проверяется наличие файлов;
  • Если файлов нет каталог считается пустым и становится претендентом на удаление.

В коде это выглядит следующим образом: 

Function Get-DirectoryContent ($path)
{
    $directory_content = Get-ChildItem $path -Force
    
    # Проверяем наличие каталогов
    if ($directories = $directory_content | Where-Object {$_.PSisContainer})
    {
        # Если есть подкаталоги проверяем их
        foreach ($directory in $directories)
        {
            $full_name_directory = $directory.FullName
            Get-DirectoryContent $full_name_directory
        }
    }
    
    # Проверяем наличие файлов
    else
    {
        if ($files = $directory_content | Where-Object {-not $_.PSisContainer})
        {
            # Если не пустой - не трогаем его
            Write-Verbose "$directory не пустой"
        }
        else
        {
            Write-Verbose "$full_name_directory" -Verbose
            return $full_name_directory
        }
    }
}

Результат работы функции для заданного каталога загоняется в переменную:

$result = Get-DirectoryContent $path

Если там что-то есть (найдены пустые каталоги) выводится подробная информация о найденных пустых каталогах с запросом на удаление:

if ($result)
{
    # Количество пустых каталогов
    Write-Host "`nПустых каталогов: " -NoNewline
    $result.Count
    
    $result | Out-GridView -Title "Пустые каталоги"
    $result | Remove-Item -Confirm
}

Если же пустые каталоги не найдены – выводится соответствующее сообщение:

else
{
    Write-Host -ForegroundColor Green "Пустые каталоги не найдены"
}
Реклама
Рубрики:Powershell Метки:
  1. Комментариев нет.
  1. No trackbacks yet.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: