Вопрос или проблема
На моем файловом сервере много разбросанных видеофайлов.
Я пытаюсь архивировать их на отдельный сервер. Однако мне нужно сохранить структуру путей/папок каждого отдельного файла на новом сервере.
Пример:
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, распределённых по различным директориям вашего исходного файлового сервера, на целевой сервер. Основное требование заключается в сохранении их оригинальной структуры каталогов, при этом исключая другие файлы из процесса перемещения.
План действий
-
Поиск файлов с расширением .mp4.
Используйте командлетGet-ChildItem
для рекурсивного поиска всех видеофайлов в исходной директории. -
Создание соответствующих директорий на целевом сервере.
Перед копированием каждого файла нужно убедиться, что на новом сервере существует соответствующая структура папок. -
Перенос файлов.
После успешного создания нужных директорий, используйте командлет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:\
, доступен и установлен правильно. Это может быть сетевой ресурс или другой локальный диск. -
Тестирование: Протестируйте скрипт с несколькими файлами, чтобы убедиться в правильности работы, прежде чем запускать его на всех данных.
-
Оптимизация: Можно оптимизировать время выполнения скрипта, уменьшив количество вызовов к файловой системе, например, предварительно создавая список уникальных директорий для создания.
Используя вышеуказанный подход, вы сможете эффективно перемещать нужные файлы, сохраняя их файловую структуру и избегая ненужных данных. Такое решение не только упрощает процесс архивации данных, но и поддерживает порядок в целевой системе.