PowerShell – Найти и переместить файлы с определенным расширением, сохраняя структуру папок

Вопрос или проблема

На моем файловом сервере много разбросанных видеофайлов.

Я пытаюсь архивировать их на отдельный сервер. Однако мне нужно сохранить структуру путей/папок каждого отдельного файла на новом сервере.

Пример:

get-childitem "D:\*" -Filter *.mp4 -recurse

Это возвращает все файлы с расширением .mp4 и их путь к папке.

Но как я могу скопировать исключительно упомянутые .mp4 файлы, игнорируя все остальные файлы, но скопировав их директории и родительские директории?

Если файл находится здесь, например:
Директория:

D:\Operating Systems & Software\Programs\Security+\AAA and Authentication – CompTIA Security+ SY0-501 – 4.1.mp4

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

Вы можете сделать это, используя что-то вроде этого:

get-childitem "D:\*" -Filter *.mp4 -recurse | foreach-object {

    $source = $_.FullName
    $target = $Source.Replace("D:\", "A:\")

    Copy-Item -LiteralPath $source -Destination $target -Force
}

Этот скрипт не создаст структуру папок для папок, которые станут пустыми, если в источнике нет mp4 файлов, но он разместит mp4 файлы в правильном месте на целевом устройстве и создаст папки, если это необходимо.

Вы также можете использовать move-item для перемещения их из исходного расположения. Просто замените copy-item на move-item. Я предположил копирование, поскольку в вашем вопросе это указано.

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

get-childitem "D:\*" -Filter *.mp4 -recurse | ForEach{
    $TargetPath = $_.DirectoryName -replace ('^C','A')
    If (!(Test-Path $TargetPath)) {
        mkdir $TargetPath | out-null
    }
    $_ | Copy-Item -Destination $TargetPath
}

Ответ или решение

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

Четкое определение задачи

Вы стоите перед задачей переноса всех файлов .mp4, распределённых по различным директориям вашего исходного файлового сервера, на целевой сервер. Основное требование заключается в сохранении их оригинальной структуры каталогов, при этом исключая другие файлы из процесса перемещения.

План действий

  1. Поиск файлов с расширением .mp4.
    Используйте командлет Get-ChildItem для рекурсивного поиска всех видеофайлов в исходной директории.

  2. Создание соответствующих директорий на целевом сервере.
    Перед копированием каждого файла нужно убедиться, что на новом сервере существует соответствующая структура папок.

  3. Перенос файлов.
    После успешного создания нужных директорий, используйте командлет Copy-Item для копирования файлов в целевую директорию.

Реализация с использованием PowerShell

Get-ChildItem "D:\*" -Filter *.mp4 -Recurse | ForEach-Object {
    # Получаем полный путь к файлу в исходной системе
    $SourceFile = $_.FullName

    # Определяем целевой путь, заменяя часть исходного пути
    $TargetFile = $SourceFile.Replace('D:\', 'A:\')

    # Извлекаем путь к директории для каждого файла
    $TargetDirectory = Split-Path -Path $TargetFile -Parent

    # Создаем директорию на целевом сервере, если она не существует
    If (-Not (Test-Path -Path $TargetDirectory)) {
        New-Item -ItemType Directory -Path $TargetDirectory | Out-Null
    }

    # Копируем файл в соответствующую директорию
    Copy-Item -Path $SourceFile -Destination $TargetFile -Force
}

Уточнения и предложения

  • Точность: Прежде чем запускать скрипт, убедитесь, что путь к целевому серверу, обозначенный как A:\, доступен и установлен правильно. Это может быть сетевой ресурс или другой локальный диск.

  • Тестирование: Протестируйте скрипт с несколькими файлами, чтобы убедиться в правильности работы, прежде чем запускать его на всех данных.

  • Оптимизация: Можно оптимизировать время выполнения скрипта, уменьшив количество вызовов к файловой системе, например, предварительно создавая список уникальных директорий для создания.

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

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

Капча загружается...