takeoutphotosanitizer:uncertain_reclassification_workflow_guide
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| takeoutphotosanitizer:uncertain_reclassification_workflow_guide [2026/02/23 17:03] – [4단계 – 실제 파일 이동] hyjeong | takeoutphotosanitizer:uncertain_reclassification_workflow_guide [2026/02/23 17:17] (current) – [4단계 – 실제 파일 이동] hyjeong | ||
|---|---|---|---|
| Line 22: | Line 22: | ||
| (작업 디렉토리) | (작업 디렉토리) | ||
| - | | + | |
| - | ├─ From_Google_Takeout/ | + | ├─ From_Google_Takeout\ |
| - | │ | + | │ |
| - | │ | + | │ |
| │ | │ | ||
| │ | │ | ||
| - | └─ _ops/ | + | └─ _ops\ |
| - | | + | |
| - | | + | |
| 이 폴더 및 그 하위에는 운영 및 관리 파일만 저장한다. | 이 폴더 및 그 하위에는 운영 및 관리 파일만 저장한다. | ||
| Line 41: | Line 41: | ||
| <code powershell> | <code powershell> | ||
| - | $root = "Photos_Backup" | + | $unc = "From_Google_Takeout\_Uncertain" |
| + | $out = " | ||
| - | $unc = Join-Path $root "From_Google_Takeout\_Uncertain" | + | if (!(Test-Path -LiteralPath |
| - | $out = Join-Path $root " | + | throw " |
| + | } | ||
| - | Get-ChildItem $unc -File -Recurse | | + | Get-ChildItem |
| Select-Object FullName, Name, Length, LastWriteTime | | Select-Object FullName, Name, Length, LastWriteTime | | ||
| - | Export-Csv $out -NoTypeInformation -Encoding UTF8 | + | Export-Csv |
| </ | </ | ||
| 생성 파일: | 생성 파일: | ||
| - | Photos_Backup/_ops/reclass/uncertain_review.csv | + | Photos_Backup\_ops\reclass\uncertain_review.csv |
| ----- | ----- | ||
| Line 68: | Line 70: | ||
| 저장 파일: | 저장 파일: | ||
| - | Photos_Backup/_ops/reclass/uncertain_review_done.csv | + | Photos_Backup\_ops\reclass\uncertain_review_done.csv |
| ----- | ----- | ||
| Line 122: | Line 124: | ||
| sha256< | sha256< | ||
| - | 이 파일은 “수동 재분류 패치 기록”이다. | + | 이 파일은 “수동 재분류 패치 기록”이다. 매 실행 시 재생성(덮어쓰기) 된다. |
| ----- | ----- | ||
| Line 133: | Line 135: | ||
| # 작업 디렉토리(= Photos_Backup)에서 실행한다고 가정 | # 작업 디렉토리(= Photos_Backup)에서 실행한다고 가정 | ||
| - | $in = " | + | $in = " |
| $rootMedia = " | $rootMedia = " | ||
| - | $log = " | + | $log |
| # 입력 파일 확인 | # 입력 파일 확인 | ||
| Line 150: | Line 152: | ||
| $logDir = Split-Path -Parent $log | $logDir = Split-Path -Parent $log | ||
| if (!(Test-Path -LiteralPath $logDir)) { New-Item -ItemType Directory -Path $logDir -Force | Out-Null } | if (!(Test-Path -LiteralPath $logDir)) { New-Item -ItemType Directory -Path $logDir -Force | Out-Null } | ||
| + | |||
| + | # 카운터(요약 출력용) | ||
| + | $cnt_total | ||
| + | $cnt_skip | ||
| + | $cnt_moved | ||
| + | $cnt_failed = 0 | ||
| Import-Csv -LiteralPath $in | | Import-Csv -LiteralPath $in | | ||
| ForEach-Object { | ForEach-Object { | ||
| + | |||
| + | $cnt_total++ | ||
| # year_final 정리(공백 제거) | # year_final 정리(공백 제거) | ||
| $yy = ("" | $yy = ("" | ||
| - | if ($yy -notmatch ' | + | if ($yy -notmatch ' |
| # 원본 파일 경로 확인 | # 원본 파일 경로 확인 | ||
| $src = $_.FullName | $src = $_.FullName | ||
| - | if ([string]:: | + | if ([string]:: |
| - | if (!(Test-Path -LiteralPath $src)) { return } | + | if (!(Test-Path -LiteralPath $src)) { $cnt_skip++; |
| + | |||
| + | # 안전장치: | ||
| + | # (대소문자 무시, 경로 구분자 혼용을 감안해 \\ 와 / 모두 허용) | ||
| + | if ($src -notmatch ' | ||
| # 목적 연도 폴더 생성 | # 목적 연도 폴더 생성 | ||
| Line 182: | Line 196: | ||
| try { | try { | ||
| Move-Item -LiteralPath $src -Destination $dst -ErrorAction Stop | Move-Item -LiteralPath $src -Destination $dst -ErrorAction Stop | ||
| + | $cnt_moved++ | ||
| } | } | ||
| catch { | catch { | ||
| $status = " | $status = " | ||
| + | $cnt_failed++ | ||
| } | } | ||
| Line 191: | Line 207: | ||
| $dstLog = ($dst -replace " | $dstLog = ($dst -replace " | ||
| - | " | + | |
| + | | ||
| Add-Content -LiteralPath $log -Encoding UTF8 | Add-Content -LiteralPath $log -Encoding UTF8 | ||
| } | } | ||
| + | |||
| + | # 요약 출력 | ||
| + | Write-Host (" | ||
| </ | </ | ||
| Line 204: | Line 224: | ||
| 생성 가능 파일: | 생성 가능 파일: | ||
| - | Photos_Backup/_ops/notes/annotations.tsv | + | Photos_Backup\_ops\notes\annotations.tsv |
| 형식: | 형식: | ||
takeoutphotosanitizer/uncertain_reclassification_workflow_guide.1771833836.txt.gz · Last modified: by hyjeong
