指定フォルダにある重複ファイルの検出、削除、移動をします。
比較は、ファイル名の「- コピー」「- Copy」「(数字)」を無視し、sha256
ハッシュと合わせて比較しますので、ファイル名が同じでも内容が異なる場合は別ファイル扱いにします。
(リポジトリ Clone
すると、ハッシュ値だけで重複確認するスクリプトもあります)
重複したファイルは CSV 出力し、削除/移動した場合はリストにその操作も記録されます。
カレントディレクトリに実行ログも出力されます。
データ出力先は default カレントディレクトリですが、指定することも可能です(ファイル名指定はできません)
スクリプト実行が制限されてエラーになる場合は、管理権限で PowerShell プロンプトを開いて以下を入力し、スクリプト実行を許可しててください。
Set-ExecutionPolicy RemoteSigned -Force
・重複ファイルを削除する
FindDuplicateFile.ps1 -Remove
・重複ファイルを C:\Backup へ移動する
FindDuplicateFile.ps1 -Move C:\Backup
FindDuplicateFile.ps1 [[-Path] <String[]>] [[-ExcludePath] <String[]>] [-Recurse] [[-Pattern] <String[]>] [[-ExcludePattern] <String[]>] [-Remove] [[-Move] <String>] [-CreateShortcut] [[-CSVPath] <String>] [[-LogPath] <String>] [-AllList] [-WhatIf] [<CommonParameters>]
重複リストのみ出力(Remove/Moveオプションを指定していない時の動作)
重複リスト出力だけをします
探査する Path(-Path)
探査する Path を指定します
除外する Path(-ExcludePath)
探査しない Path を指定します
サブディレクトリも探査(-Recurse)
サブディレクトリも探査します
削除(-Remove)
重複したファイルを削除します
重複リストには削除処理が記録されます
移動(-Move)
重複したファイルを指定フォルダに移動します
重複リストには移動処理と移動先ファイル名が記録されます
移動先に同一ファイルがあった場合は「(数字)」をインクリメントします
ファイルパターン指定(-Pattern)
特定拡張子のファイルだけ重複確認する場合は、パターン(*.jpg
とか)を指定します
複数指定する場合は、カンマ「,」で区切ってください
除外ファイルパターン指定(-ExcludePattern)
特定拡張子のファイルを対象から除外する場合は、除外パターン(*.mov とか)を指定します
複数指定する場合は、カンマ「,」で区切ってください
ショートカット作成(-CreateShortcut)
ファイルを削除/移動する際にオリジナルファイルへのショートカットを残します
テスト(-WhatIf)
実際の削除/移動はせず、動作確認だけします
-Path
探索 Path
省略時はカレントディレクトリ以下を探索します
複数指定する場合はカンマで区切ります
-ExcludePath
探索から除外する Path
省略時は除外しません
複数指定する場合はカンマで区切ります
-Recurse
サブディレクトリも探査する
-Pattern
対象ファイルパターン
省略時はすべてのファイルを対象にします
複数指定する場合はカンマで区切ります
-ExcludePattern
対象から除外するファイルパターン
省略時は除外しません
複数指定する場合はカンマで区切ります
-Remove
重複ファイルを削除します
Remove/Move が指定されていない場合は重複リストのみを出力します
-Move
重複ファイルの移動先
Remove/Move が指定されていない場合は重複リストのみを出力します
Remove/Move の両方が指定された場合は Move が優先されます
-CreateShortcut
ショートカット作成
ファイルを削除/移動する際にオリジナルファイルへのショートカットを残します
(Windows プラットフォーム専用オプション)
-CSVPath
CSV の出力先
省略時はカレントディレクトリに出力します
-LogPath
実行ログの出力先
省略時はカレントディレクトリに出力します
-AllList
重複確認する全ファイル リストを CSV 出力します
-WhatIf
実際の削除/移動はせず、動作確認だけします
PS C:\Photo> ~\FindDuplicateFile.ps1 -Recurse
カレントディレクトリ(C:\Photo)以下にある全ファイルの重複リストを出力します
PS C:\Test> ~\FindDuplicateFile.ps1 -Path "C:\Photo" -Recurse
指定ディレクトリ(C:\Photo)以下にある全ファイルの重複リストを出力します
PS C:\Test> ~\FindDuplicateFile.ps1 -Path "C:\Photo" -Recurse -ExcludePath "C:\Photo\Movie"
指定ディレクトリ(C:\Photo)以下にある全ファイルの重複リストを出力しますが、除外ディレクトリ(C:\Photo\Movie)は対象外にします
PS C:\Photo> ~\FindDuplicateFile.ps1 -Recurse -Pattern *.jpg, *.png
カレントディレクトリ(C:\Photo)以下にある「*.jpg」と「*.png」の重複リストを出力します
動画や ISO などサイズの大きなファイルは、ハッシュ値の取得に時間がかかるので、特定種別のファイルだけ重複排除する場合はファイルパターンを指定するがお勧めです。
PS C:\Photo> ~\FindDuplicateFile.ps1 -Path C:\Photo\2018-10, C:\Photo\2016-03 -Recurse -Pattern *.jpg, *.png
「C:\Photo\2018-10」と「C:\Photo\2016-03」以下にある「*.jpg」と「*.png」の重複リストを出力します
PS C:\Photo> .\FindDuplicateFile.ps1 -Path C:\Photo\2018-10, C:\Photo\2016-03 -Recurse -ExcludePattern *.iso, *.mov, *.mp4
「C:\Photo\2018-10」と「C:\Photo\2016-03」以下にある「*.iso」と「*.mov」と「*.mp4」以外の重複リストを出力します
PS C:\Photo> ~\FindDuplicateFile.ps1 -Path C:\Photo\2018-10, C:\Photo\2016-03 -Recurse -Pattern *.jpg, *.png -Remove
「C:\Photo\2018-10」と「C:\Photo\2016-03」以下にある「*.jpg」と「*.png」の重複ファイルを削除します
PS C:\Photo> ~\FindDuplicateFile.ps1 -Path C:\Photo\2018-10, C:\Photo\2016-03 -Recurse -Pattern *.jpg, *.png -Move C:\Photo\Backup
「C:\Photo\2018-10」と「C:\Photo\2016-03」以下にある「*.jpg」と「*.png」の重複ファイルを「C:\Photo\Backup」へ移動します
PS C:\Photo> ~\FindDuplicateFile.ps1 -Path C:\Photo\2018-10, C:\Photo\2016-03 -Recurse -Pattern *.jpg, *.png -Move C:\Photo\Backup -WhatIf
「C:\Photo\2018-10」と「C:\Photo\2016-03」以下にある「*.jpg」と「*.png」の重複ファイルを「C:\Photo\Backup」へ移動した場合の動作を確認します(実際の移動はしません)
PS C:\Photo> ~\FindDuplicateFile.ps1 -Path C:\Photo\2018-10, C:\Photo\2016-03 -Recurse -Pattern *.jpg, *.png -Move C:\Photo\Backup -CSVPath C:\Photo\CSV
「C:\Photo\2018-10」と「C:\Photo\2016-03」以下にある「*.jpg」と「*.png」の重複ファイルを「C:\Photo\Backup」へ移動します
重複リストを「C:\Photo\CSV」に出力します
PS C:\Photo> ~\FindDuplicateFile.ps1 -Path C:\Photo\2018-10, C:\Photo\2016-03 -Recurse -Pattern *.jpg, *.png -Move C:\Photo\Backup -CSVPath C:\Photo\CSV -LogPath C:\Photo\Log
「C:\Photo\2018-10」と「C:\Photo\2016-03」以下にある「*.jpg」と「*.png」の重複ファイルを「C:\Photo\Backup」へ移動します
重複リストは「C:\Photo\CSV」に、実行ログは「C:\Photo\Log」に出力します
PS C:\Photo> .\FindDuplicateFile.ps1 -Path C:\Photo\2018-10, C:\Photo\2016-03 -Recurse -Pattern *.jpg, *.png -Move C:\Photo\Backup -CreateShortcut
「C:\Photo\2018-10」と「C:\Photo\2016-03」以下にある「*.jpg」と「*.png」の重複ファイルを「C:\Photo\Backup」へ移動し、代わりにショートカットを置きます
重複リストを「C:\Photo\CSV」に出力します
Windows 10 : PowerShell 5.1
Windows 10 : PowerShell 6.0.1
6.0.1 で動作確認しているので、Windows 以外でも動作すると思います。
リポジトリを Clone するか、Invoke-WebRequest してください
Invoke-WebRequest https://raw.githubusercontent.com/MuraAtVwnet/FindDuplicateFile/master/FindDuplicateFile.ps1 -OutFile ~\FindDuplicateFile.ps1
https://github.com/MuraAtVwnet/FindDuplicateFile
git@github.com:MuraAtVwnet/FindDuplicateFile.git
Bug リポートなどありましたらfeed back をください
mura-softwaers[at]vwnet.jp
Copyright © MURA All rights reserved.