问题描述
我正在尝试做一些日志备份,并努力使用 ps1 命令,它可以为我做到这一点。
folder_root/ ├── sub_a/ │ ├── Logs │ ├── bootstrap.min.css │ ├── Configuration ├── sub_b/ │ ├── Logs │ └── Settings └── sub_c/ ├── Logs ├── Application ├── class.js └── other-file.html
我只需要从所有子目录中提取 Logs 文件夹并将其复制到备份文件夹(存在)尊重现有文件夹结构:
Backup-03-24/ ├── sub_a/ │ └── Logs ├── sub_b/ │ └── Logs └── sub_c/ └── Logs
如何使用 Powershell 实现这一点?我正在尝试在路径中使用带有通配符的 copy-Item cmdlet,但它不起作用。
copy-Item -Destination "C:\folder_root\*\Logs"
解决方法
这太难了。只需循环使用 Get-ChildItem
获得的目录,对要复制的文件夹名称使用过滤器:
$sourcePath = 'D:\folder_root'
$Destination = 'D:\Backup-03-24'
Get-ChildItem -Path $sourcePath -Filter 'Logs' -Recurse -Directory |
ForEach-Object {
$targetPath = Join-Path -Path $Destination -ChildPath $_.Parent.FullName.Substring($sourcePath.Length)
$null = New-Item -Path $targetPath -ItemType Directory -Force
$_ | Copy-Item -Destination $targetPath -Recurse -Force
}
结果:
D:\BACKUP-03-24
+---sub_a
| \---Logs
+---sub_b
| \---Logs
\---sub_c
\---Logs