またChatgptに作らせてみたシリーズ。
Powershellで指定した拡張子のファイルの複製をリストアップするスクリプト。
$basePath = "C:\tmp\" $fileExtensions = @(".jpg", ".jpeg", ".png", ".bmp", ".gif") # Get all files recursively $targetFiles = Get-ChildItem $basePath -Recurse | Where-Object { $_.Extension -in $fileExtensions } # Group files by content hash $hashGroups = $targetFiles | Group-Object { (Get-FileHash $_.FullName).Hash } # Filter groups that have more than one file with the same hash $duplicateGroups = $hashGroups | Where-Object { $_.Count -gt 1 } # Display information about duplicate files foreach ($group in $duplicateGroups) { Write-Host "Duplicate files with hash $($group.Name):" foreach ($file in $group.Group) { Write-Host " $($file.FullName) (size $($file.Length))" } }
basePath fileExtensions を編集すれば各自の用途に応じて利用可能。
chatgptはハッシュ値で似たfileも検出できる的回答をしていたが、それは仕組み的に違うと思うが、同一ファイルなら使える事を確認済み。
丸っと信じられるレベルではないがやっぱり生産性は高い。
ちゃんと真贋を見極める知見さえあれば使える。
以下動作の解説。
このPowerShellスクリプトの概要は、指定されたディレクトリの下にあるすべての画像ファイルを再帰的に取得し、そのハッシュ値を計算して、重複したファイルを検出するために使用されます。以下はスクリプトの各行についての詳細な説明です。
1行目:$basePath変数に"C:\tmp"というパスを割り当てます。この変数は、検索するベースディレクトリを指定します。
2行目:$fileExtensions変数に、検索するファイルの拡張子を格納する配列を割り当てます。
4行目:Get-ChildItemコマンドレットを使用して、$basePathで指定されたディレクトリの下にあるすべてのファイルを再帰的に取得します。Where-Objectコマンドレットを使用して、ファイルの拡張子が$fileExtensionsで指定された拡張子のいずれかであるものだけを選択します。そして、それらのファイルを$targetFiles変数に割り当てます。
6行目:Group-Objectコマンドレットを使用して、$targetFiles変数に含まれるファイルをハッシュ値でグループ化します。Get-FileHashコマンドレットを使用して、各ファイルのハッシュ値を計算し、その値に基づいてファイルをグループ化します。$hashGroups変数に、ハッシュ値が同じファイルを含むグループのリストが格納されます。
8行目:Where-Objectコマンドレットを使用して、$hashGroups変数に格納されたグループのうち、同じハッシュ値を持つファイルが2つ以上あるものだけを選択します。つまり、重複したファイルを含むグループのリストを$duplicateGroups変数に格納します。
10行目から13行目:重複したファイルに関する情報を表示するためのループです。$duplicateGroups変数に格納された各グループについて、グループのハッシュ値と、そのグループ内の各重複したファイルのパスとサイズを表示します。
0 件のコメント:
コメントを投稿