diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/sync-from-project.ps1 | 291 | ||||
| -rw-r--r-- | scripts/sync-to-project.ps1 | 455 |
2 files changed, 374 insertions, 372 deletions
diff --git a/scripts/sync-from-project.ps1 b/scripts/sync-from-project.ps1 index 45ff258..73ba1c5 100644 --- a/scripts/sync-from-project.ps1 +++ b/scripts/sync-from-project.ps1 @@ -1,137 +1,154 @@ -# Script pour restaurer les fichiers de configuration depuis le projet -# Lit path-mapping.json et copie chaque fichier vers son emplacement original - -param( - [string]$MappingFile = "path-mapping.json" -) - -$ErrorActionPreference = "Stop" - -# Vérifier que le fichier de mapping existe -if (-not (Test-Path $MappingFile)) { - Write-Error "Le fichier de mapping '$MappingFile' n'existe pas. Exécutez d'abord sync-to-project.ps1" - exit 1 -} - -# Charger le mapping -try { - $mapping = Get-Content $MappingFile -Raw | ConvertFrom-Json -} catch { - Write-Error "Impossible de charger le fichier de mapping: $_" - exit 1 -} - -$restoredCount = 0 -$skippedCount = 0 -$errorCount = 0 - -# Fonction pour résoudre un chemin Windows -function Resolve-WindowsPath { - param([string]$path) - - # Remplacer les variables d'environnement - $resolved = $path - $resolved = $resolved -replace '%USERPROFILE%', $env:USERPROFILE - $resolved = $resolved -replace '%APPDATA%', $env:APPDATA - $resolved = $resolved -replace '%LOCALAPPDATA%', $env:LOCALAPPDATA - $resolved = $resolved -replace '%HOME%', $env:HOME - - # Remplacer les autres variables d'environnement - $resolved = [System.Environment]::ExpandEnvironmentVariables($resolved) - - return $resolved -} - -# Traiter les fichiers Windows -if ($mapping.windows) { - $mapping.windows.PSObject.Properties | ForEach-Object { - $originalPath = $_.Name - $projectPath = $_.Value - - try { - # Vérifier que le fichier source existe dans le projet - if (-not (Test-Path $projectPath)) { - Write-Warning "Fichier source introuvable dans le projet: $projectPath" - $skippedCount++ - return - } - - # Résoudre le chemin de destination - $destinationPath = Resolve-WindowsPath $originalPath - - # Créer le répertoire parent si nécessaire - $destinationDir = Split-Path $destinationPath -Parent - if ($destinationDir -and -not (Test-Path $destinationDir)) { - New-Item -ItemType Directory -Path $destinationDir -Force | Out-Null - Write-Host "Créé le répertoire: $destinationDir" - } - - # Copier le fichier - Copy-Item -Path $projectPath -Destination $destinationPath -Force - - Write-Host "Restauré: $projectPath -> $destinationPath" - $restoredCount++ - - } catch { - Write-Error "Erreur lors de la restauration de '$originalPath': $_" - $errorCount++ - } - } -} - -# Traiter les fichiers WSL -if ($mapping.wsl) { - $mapping.wsl.PSObject.Properties | ForEach-Object { - $originalPath = $_.Name - $projectPath = $_.Value - - try { - # Vérifier que le fichier source existe dans le projet - if (-not (Test-Path $projectPath)) { - Write-Warning "Fichier source introuvable dans le projet: $projectPath" - $skippedCount++ - return - } - - # Résoudre le chemin de destination WSL - $wslDestination = $originalPath - if ($wslDestination -match '^~') { - $wslDestination = wsl bash -c "echo $wslDestination" - } - - # Créer le répertoire parent si nécessaire - $wslDir = Split-Path $wslDestination -Parent - if ($wslDir) { - wsl mkdir -p "$wslDir" 2>$null - } - - # Copier le fichier vers WSL - # Convertir le chemin Windows en chemin WSL - $wslSource = (wsl wslpath -a $projectPath) - wsl cp "$wslSource" "$wslDestination" - - if ($LASTEXITCODE -ne 0) { - # Fallback: utiliser PowerShell pour copier vers WSL - $content = Get-Content $projectPath -Raw -Encoding UTF8 - $tempFile = [System.IO.Path]::GetTempFileName() - Set-Content -Path $tempFile -Value $content -Encoding UTF8 - $wslTemp = (wsl wslpath -a $tempFile) - wsl cp "$wslTemp" "$wslDestination" - Remove-Item $tempFile - } - - Write-Host "Restauré (WSL): $projectPath -> $wslDestination" - $restoredCount++ - - } catch { - Write-Error "Erreur lors de la restauration WSL de '$originalPath': $_" - $errorCount++ - } - } -} - -Write-Host "`nRésumé:" -Write-Host " Fichiers restaurés: $restoredCount" -Write-Host " Fichiers ignorés: $skippedCount" -Write-Host " Erreurs: $errorCount" - +# Script pour restaurer les fichiers de configuration depuis le projet
+# Lit path-mapping.json et copie chaque fichier vers son emplacement original
+
+param(
+ [string]$MappingFile = "path-mapping.json"
+)
+
+$ErrorActionPreference = "Stop"
+
+# Vérifier que le fichier de mapping existe
+if (-not (Test-Path $MappingFile)) {
+ Write-Error "Le fichier de mapping '$MappingFile' n'existe pas. Exécutez d'abord sync-to-project.ps1"
+ exit 1
+}
+
+# Charger le mapping
+try {
+ $mapping = Get-Content $MappingFile -Raw | ConvertFrom-Json
+} catch {
+ Write-Error "Impossible de charger le fichier de mapping: $_"
+ exit 1
+}
+
+$restoredCount = 0
+$skippedCount = 0
+$errorCount = 0
+
+# Fonction pour résoudre un chemin Windows
+function Resolve-WindowsPath {
+ param([string]$path)
+
+ # Remplacer les variables d'environnement
+ $resolved = $path
+ $resolved = $resolved -replace '%USERPROFILE%', $env:USERPROFILE
+ $resolved = $resolved -replace '%APPDATA%', $env:APPDATA
+ $resolved = $resolved -replace '%LOCALAPPDATA%', $env:LOCALAPPDATA
+ $resolved = $resolved -replace '%HOME%', $env:HOME
+
+ # Remplacer les autres variables d'environnement
+ $resolved = [System.Environment]::ExpandEnvironmentVariables($resolved)
+
+ return $resolved
+}
+
+# Fonction pour résoudre un chemin WSL vers un chemin Windows accessible
+function Resolve-WSLPath {
+ param([string]$path)
+
+ # Détecter la distribution WSL (par défaut Ubuntu)
+ $wslDistro = "Ubuntu"
+
+ # Expansion de ~ vers /home/toshiro (ou autre utilisateur)
+ if ($path -match '^~') {
+ $homePath = wsl bash -c "echo ~" 2>$null
+ if ($LASTEXITCODE -eq 0 -and $homePath) {
+ $path = $path -replace '^~', $homePath
+ } else {
+ # Fallback: utiliser toshiro
+ $path = $path -replace '^~', "/home/toshiro"
+ }
+ }
+
+ # Convertir le chemin WSL en chemin Windows accessible
+ # Format: /home/toshiro/.bashrc -> \\wsl.localhost\Ubuntu\home\toshiro\.bashrc
+ if ($path -match '^/') {
+ # Enlever le slash initial
+ $relativePath = $path.Substring(1)
+ # Convertir en chemin Windows
+ $windowsPath = "\\wsl.localhost\$wslDistro\$relativePath" -replace '/', '\'
+ return $windowsPath
+ }
+
+ return $path
+}
+
+# Traiter les fichiers Windows
+if ($mapping.windows) {
+ $mapping.windows.PSObject.Properties | ForEach-Object {
+ $originalPath = $_.Name
+ $projectPath = $_.Value
+
+ try {
+ # Vérifier que le fichier source existe dans le projet
+ if (-not (Test-Path $projectPath)) {
+ Write-Warning "Fichier source introuvable dans le projet: $projectPath"
+ $skippedCount++
+ return
+ }
+
+ # Résoudre le chemin de destination
+ $destinationPath = Resolve-WindowsPath $originalPath
+
+ # Créer le répertoire parent si nécessaire
+ $destinationDir = Split-Path $destinationPath -Parent
+ if ($destinationDir -and -not (Test-Path $destinationDir)) {
+ New-Item -ItemType Directory -Path $destinationDir -Force | Out-Null
+ Write-Host "Créé le répertoire: $destinationDir"
+ }
+
+ # Copier le fichier
+ Copy-Item -Path $projectPath -Destination $destinationPath -Force
+
+ Write-Host "Restauré: $projectPath -> $destinationPath"
+ $restoredCount++
+
+ } catch {
+ Write-Error "Erreur lors de la restauration de '$originalPath': $_"
+ $errorCount++
+ }
+ }
+}
+
+# Traiter les fichiers WSL
+if ($mapping.wsl) {
+ $mapping.wsl.PSObject.Properties | ForEach-Object {
+ $originalPath = $_.Name
+ $projectPath = $_.Value
+
+ try {
+ # Vérifier que le fichier source existe dans le projet
+ if (-not (Test-Path $projectPath)) {
+ Write-Warning "Fichier source introuvable dans le projet: $projectPath"
+ $skippedCount++
+ return
+ }
+
+ # Résoudre le chemin de destination WSL en chemin Windows accessible
+ $destinationPath = Resolve-WSLPath $originalPath
+
+ # Créer le répertoire parent si nécessaire
+ $destinationDir = Split-Path $destinationPath -Parent
+ if ($destinationDir -and -not (Test-Path $destinationDir)) {
+ New-Item -ItemType Directory -Path $destinationDir -Force | Out-Null
+ Write-Host "Créé le répertoire: $destinationDir"
+ }
+
+ # Copier le fichier directement (maintenant que le chemin WSL est converti en chemin Windows)
+ Copy-Item -Path $projectPath -Destination $destinationPath -Force
+
+ Write-Host "Restauré (WSL): $projectPath -> $destinationPath"
+ $restoredCount++
+
+ } catch {
+ Write-Error "Erreur lors de la restauration WSL de '$originalPath': $_"
+ $errorCount++
+ }
+ }
+}
+
+Write-Host "`nRésumé:"
+Write-Host " Fichiers restaurés: $restoredCount"
+Write-Host " Fichiers ignorés: $skippedCount"
+Write-Host " Erreurs: $errorCount"
+
diff --git a/scripts/sync-to-project.ps1 b/scripts/sync-to-project.ps1 index aef1249..dc7423a 100644 --- a/scripts/sync-to-project.ps1 +++ b/scripts/sync-to-project.ps1 @@ -1,235 +1,220 @@ -# Script pour copier les fichiers de configuration vers le projet -# Lit files-config.txt et copie chaque fichier vers configs/{system}/ - -param( - [string]$ConfigFile = "files-config.txt", - [string]$MappingFile = "path-mapping.json" -) - -$ErrorActionPreference = "Stop" - -# Vérifier que le fichier de configuration existe -if (-not (Test-Path $ConfigFile)) { - Write-Error "Le fichier de configuration '$ConfigFile' n'existe pas." - exit 1 -} - -# Créer les répertoires de destination -$configsDir = "configs" -$windowsDir = Join-Path $configsDir "windows" -$wslDir = Join-Path $configsDir "wsl" - -foreach ($dir in @($configsDir, $windowsDir, $wslDir)) { - if (-not (Test-Path $dir)) { - New-Item -ItemType Directory -Path $dir -Force | Out-Null - Write-Host "Créé le répertoire: $dir" - } -} - -# Charger le mapping existant ou créer un nouveau -$mapping = @{ - windows = @{} - wsl = @{} -} - -if (Test-Path $MappingFile) { - try { - $existingMapping = Get-Content $MappingFile -Raw | ConvertFrom-Json - if ($existingMapping.windows) { - $mapping.windows = @{} - $existingMapping.windows.PSObject.Properties | ForEach-Object { - $mapping.windows[$_.Name] = $_.Value - } - } - if ($existingMapping.wsl) { - $mapping.wsl = @{} - $existingMapping.wsl.PSObject.Properties | ForEach-Object { - $mapping.wsl[$_.Name] = $_.Value - } - } - } catch { - Write-Warning "Impossible de charger le mapping existant, création d'un nouveau mapping." - } -} - -# Fonction pour résoudre un chemin Windows -function Resolve-WindowsPath { - param([string]$path) - - # Remplacer les variables d'environnement - $resolved = $path - $resolved = $resolved -replace '%USERPROFILE%', $env:USERPROFILE - $resolved = $resolved -replace '%APPDATA%', $env:APPDATA - $resolved = $resolved -replace '%LOCALAPPDATA%', $env:LOCALAPPDATA - $resolved = $resolved -replace '%HOME%', $env:HOME - $resolved = $resolved -replace '%USERPROFILE%', $env:USERPROFILE - - # Remplacer les autres variables d'environnement - $resolved = [System.Environment]::ExpandEnvironmentVariables($resolved) - - return $resolved -} - -# Fonction pour résoudre un chemin WSL -function Resolve-WSLPath { - param([string]$path) - - # Expansion de ~ - if ($path -match '^~') { - $homePath = wsl bash -c "echo ~" - $path = $path -replace '^~', $homePath - } - - return $path -} - -# Fonction pour obtenir le chemin relatif dans le projet -function Get-ProjectPath { - param( - [string]$system, - [string]$originalPath - ) - - # Nettoyer chaque partie du chemin - $parts = $originalPath -split '[\\/]' - $safeParts = @() - - foreach ($part in $parts) { - # Nettoyer chaque partie : remplacer les caractères invalides et les variables - $safePart = $part -replace '[\\/:*?"<>|]', '_' - $safePart = $safePart -replace '^%', 'var_' -replace '%$', '' -replace '%', '_' - $safePart = $safePart -replace '^~', 'home' - - # Si la partie est vide après nettoyage, utiliser un nom par défaut - if ([string]::IsNullOrWhiteSpace($safePart)) { - $safePart = "root" - } - - $safeParts += $safePart - } - - # Rejoindre toutes les parties avec des underscores - $safeName = $safeParts -join '_' - - # Construire le chemin final - $basePath = Join-Path "configs" $system - return Join-Path $basePath $safeName -} - -# Lire et traiter le fichier de configuration -$lines = Get-Content $ConfigFile | Where-Object { - $_ -notmatch '^\s*#' -and $_.Trim() -ne '' -} - -$copiedCount = 0 -$skippedCount = 0 -$errorCount = 0 - -foreach ($line in $lines) { - $line = $line.Trim() - if ($line -eq '' -or $line -match '^\s*#') { - continue - } - - # Parser la ligne: système|chemin - if ($line -notmatch '^(\w+)\|(.+)$') { - Write-Warning "Ligne ignorée (format invalide): $line" - continue - } - - $system = $matches[1] - $originalPath = $matches[2] - - if ($system -notin @('windows', 'wsl')) { - Write-Warning "Système invalide '$system' dans la ligne: $line" - continue - } - - try { - # Résoudre le chemin selon le système - if ($system -eq 'windows') { - $resolvedPath = Resolve-WindowsPath $originalPath - } else { - # Pour WSL, utiliser wsl pour résoudre le chemin - $wslPath = $originalPath - if ($wslPath -match '^~') { - $wslPath = wsl bash -c "echo $wslPath" - } - $resolvedPath = $wslPath - } - - # Vérifier que le fichier existe - if ($system -eq 'windows') { - if (-not (Test-Path $resolvedPath)) { - Write-Warning "Fichier introuvable: $resolvedPath (original: $originalPath)" - $skippedCount++ - continue - } - } else { - # Pour WSL, vérifier via wsl - wsl test -f "$resolvedPath" 2>$null | Out-Null - if ($LASTEXITCODE -ne 0) { - Write-Warning "Fichier introuvable dans WSL: $resolvedPath (original: $originalPath)" - $skippedCount++ - continue - } - } - - # Obtenir le chemin de destination dans le projet - $projectPath = Get-ProjectPath $system $originalPath - - # Créer le répertoire parent si nécessaire - $projectDir = Split-Path $projectPath -Parent - if (-not (Test-Path $projectDir)) { - New-Item -ItemType Directory -Path $projectDir -Force | Out-Null - } - - # Copier le fichier - if ($system -eq 'windows') { - Copy-Item -Path $resolvedPath -Destination $projectPath -Force - } else { - # Pour WSL, utiliser PowerShell pour copier depuis WSL - # Méthode plus fiable : lire le contenu depuis WSL et l'écrire avec PowerShell - try { - $content = wsl cat "$resolvedPath" 2>&1 - if ($LASTEXITCODE -eq 0) { - # Convertir le contenu en chaîne si c'est un tableau - if ($content -is [array]) { - $content = $content -join "`n" - } - Set-Content -Path $projectPath -Value $content -Encoding UTF8 -Force - } else { - throw "Erreur lors de la lecture du fichier WSL: $content" - } - } catch { - Write-Error "Impossible de copier le fichier WSL '$resolvedPath': $_" - throw - } - } - - # Enregistrer le mapping - $mapping[$system][$originalPath] = $projectPath - - Write-Host "Copié: $originalPath -> $projectPath" - $copiedCount++ - - } catch { - Write-Error "Erreur lors du traitement de '$line': $_" - $errorCount++ - } -} - -# Sauvegarder le mapping -$mappingJson = @{ - windows = $mapping.windows - wsl = $mapping.wsl -} | ConvertTo-Json -Depth 10 - -Set-Content -Path $MappingFile -Value $mappingJson -Encoding UTF8 - -Write-Host "`nRésumé:" -Write-Host " Fichiers copiés: $copiedCount" -Write-Host " Fichiers ignorés: $skippedCount" -Write-Host " Erreurs: $errorCount" -Write-Host " Mapping sauvegardé dans: $MappingFile" - +# Script pour copier les fichiers de configuration vers le projet
+# Lit files-config.txt et copie chaque fichier vers configs/{system}/
+
+param(
+ [string]$ConfigFile = "files-config.txt",
+ [string]$MappingFile = "path-mapping.json"
+)
+
+$ErrorActionPreference = "Stop"
+
+# Vérifier que le fichier de configuration existe
+if (-not (Test-Path $ConfigFile)) {
+ Write-Error "Le fichier de configuration '$ConfigFile' n'existe pas."
+ exit 1
+}
+
+# Créer les répertoires de destination
+$configsDir = "configs"
+$windowsDir = Join-Path $configsDir "windows"
+$wslDir = Join-Path $configsDir "wsl"
+
+foreach ($dir in @($configsDir, $windowsDir, $wslDir)) {
+ if (-not (Test-Path $dir)) {
+ New-Item -ItemType Directory -Path $dir -Force | Out-Null
+ Write-Host "Créé le répertoire: $dir"
+ }
+}
+
+# Charger le mapping existant ou créer un nouveau
+$mapping = @{
+ windows = @{}
+ wsl = @{}
+}
+
+if (Test-Path $MappingFile) {
+ try {
+ $existingMapping = Get-Content $MappingFile -Raw | ConvertFrom-Json
+ if ($existingMapping.windows) {
+ $mapping.windows = @{}
+ $existingMapping.windows.PSObject.Properties | ForEach-Object {
+ $mapping.windows[$_.Name] = $_.Value
+ }
+ }
+ if ($existingMapping.wsl) {
+ $mapping.wsl = @{}
+ $existingMapping.wsl.PSObject.Properties | ForEach-Object {
+ $mapping.wsl[$_.Name] = $_.Value
+ }
+ }
+ } catch {
+ Write-Warning "Impossible de charger le mapping existant, création d'un nouveau mapping."
+ }
+}
+
+# Fonction pour résoudre un chemin Windows
+function Resolve-WindowsPath {
+ param([string]$path)
+
+ # Remplacer les variables d'environnement
+ $resolved = $path
+ $resolved = $resolved -replace '%USERPROFILE%', $env:USERPROFILE
+ $resolved = $resolved -replace '%APPDATA%', $env:APPDATA
+ $resolved = $resolved -replace '%LOCALAPPDATA%', $env:LOCALAPPDATA
+ $resolved = $resolved -replace '%HOME%', $env:HOME
+ $resolved = $resolved -replace '%USERPROFILE%', $env:USERPROFILE
+
+ # Remplacer les autres variables d'environnement
+ $resolved = [System.Environment]::ExpandEnvironmentVariables($resolved)
+
+ return $resolved
+}
+
+# Fonction pour résoudre un chemin WSL vers un chemin Windows accessible
+function Resolve-WSLPath {
+ param([string]$path)
+
+ # Détecter la distribution WSL (par défaut Ubuntu)
+ $wslDistro = "Ubuntu"
+
+ # Expansion de ~ vers /home/toshiro (ou autre utilisateur)
+ if ($path -match '^~') {
+ $homePath = wsl bash -c "echo ~" 2>$null
+ if ($LASTEXITCODE -eq 0 -and $homePath) {
+ $path = $path -replace '^~', $homePath
+ } else {
+ # Fallback: utiliser toshiro
+ $path = $path -replace '^~', "/home/toshiro"
+ }
+ }
+
+ # Convertir le chemin WSL en chemin Windows accessible
+ # Format: /home/toshiro/.bashrc -> \\wsl.localhost\Ubuntu\home\toshiro\.bashrc
+ if ($path -match '^/') {
+ # Enlever le slash initial
+ $relativePath = $path.Substring(1)
+ # Convertir en chemin Windows
+ $windowsPath = "\\wsl.localhost\$wslDistro\$relativePath" -replace '/', '\'
+ return $windowsPath
+ }
+
+ return $path
+}
+
+# Fonction pour obtenir le chemin relatif dans le projet
+function Get-ProjectPath {
+ param(
+ [string]$system,
+ [string]$originalPath
+ )
+
+ # Nettoyer chaque partie du chemin
+ $parts = $originalPath -split '[\\/]'
+ $safeParts = @()
+
+ foreach ($part in $parts) {
+ # Nettoyer chaque partie : remplacer les caractères invalides et les variables
+ $safePart = $part -replace '[\\/:*?"<>|]', '_'
+ $safePart = $safePart -replace '^%', 'var_' -replace '%$', '' -replace '%', '_'
+ $safePart = $safePart -replace '^~', 'home'
+
+ # Si la partie est vide après nettoyage, utiliser un nom par défaut
+ if ([string]::IsNullOrWhiteSpace($safePart)) {
+ $safePart = "root"
+ }
+
+ $safeParts += $safePart
+ }
+
+ # Rejoindre toutes les parties avec des underscores
+ $safeName = $safeParts -join '_'
+
+ # Construire le chemin final
+ $basePath = Join-Path "configs" $system
+ return Join-Path $basePath $safeName
+}
+
+# Lire et traiter le fichier de configuration
+$lines = Get-Content $ConfigFile | Where-Object {
+ $_ -notmatch '^\s*#' -and $_.Trim() -ne ''
+}
+
+$copiedCount = 0
+$skippedCount = 0
+$errorCount = 0
+
+foreach ($line in $lines) {
+ $line = $line.Trim()
+ if ($line -eq '' -or $line -match '^\s*#') {
+ continue
+ }
+
+ # Parser la ligne: système|chemin
+ if ($line -notmatch '^(\w+)\|(.+)$') {
+ Write-Warning "Ligne ignorée (format invalide): $line"
+ continue
+ }
+
+ $system = $matches[1]
+ $originalPath = $matches[2]
+
+ if ($system -notin @('windows', 'wsl')) {
+ Write-Warning "Système invalide '$system' dans la ligne: $line"
+ continue
+ }
+
+ try {
+ # Résoudre le chemin selon le système
+ if ($system -eq 'windows') {
+ $resolvedPath = Resolve-WindowsPath $originalPath
+ } else {
+ # Pour WSL, convertir en chemin Windows accessible
+ $resolvedPath = Resolve-WSLPath $originalPath
+ }
+
+ # Vérifier que le fichier existe
+ if (-not (Test-Path $resolvedPath)) {
+ Write-Warning "Fichier introuvable: $resolvedPath (original: $originalPath)"
+ $skippedCount++
+ continue
+ }
+
+ # Obtenir le chemin de destination dans le projet
+ $projectPath = Get-ProjectPath $system $originalPath
+
+ # Créer le répertoire parent si nécessaire
+ $projectDir = Split-Path $projectPath -Parent
+ if (-not (Test-Path $projectDir)) {
+ New-Item -ItemType Directory -Path $projectDir -Force | Out-Null
+ }
+
+ # Copier le fichier
+ # Maintenant que les chemins WSL sont convertis en chemins Windows, on peut utiliser Copy-Item pour les deux
+ Copy-Item -Path $resolvedPath -Destination $projectPath -Force
+
+ # Enregistrer le mapping
+ $mapping[$system][$originalPath] = $projectPath
+
+ Write-Host "Copié: $originalPath -> $projectPath"
+ $copiedCount++
+
+ } catch {
+ Write-Error "Erreur lors du traitement de '$line': $_"
+ $errorCount++
+ }
+}
+
+# Sauvegarder le mapping
+$mappingJson = @{
+ windows = $mapping.windows
+ wsl = $mapping.wsl
+} | ConvertTo-Json -Depth 10
+
+Set-Content -Path $MappingFile -Value $mappingJson -Encoding UTF8
+
+Write-Host "`nRésumé:"
+Write-Host " Fichiers copiés: $copiedCount"
+Write-Host " Fichiers ignorés: $skippedCount"
+Write-Host " Erreurs: $errorCount"
+Write-Host " Mapping sauvegardé dans: $MappingFile"
+
|
