diff --git a/util/Create-TestFiles.ps1 b/util/Create-TestFiles.ps1 new file mode 100644 index 0000000..13936e8 --- /dev/null +++ b/util/Create-TestFiles.ps1 @@ -0,0 +1,69 @@ +#!/usr/bin/pswh + +# +# author: arian +# date: 2025-02-04 +# + +# +# Creates a random sub-tree of files and directories, up to $MaxDepth levels deep. All files are +# named with random GUID names and have a random "last modified" timestamp. Use this only for +# test files within the directory you're currently in. +# +# Usage: /path/to/script +# Usage: /path/to/script -MaxDepth 10 +# Usage: /path/to/script -m 10 +# Usage: /path/to/script -MaxDepth 10 -Iterations 10 +# Usage: /path/to/script -m 10 -i 10 +# Usage: /path/to/script -MaxDepth 10 -Iterations 10 -ChangeLastModified +# Usage: /path/to/script -m 10 -i 10 -c +# +# Using a higher $Iterations takes significantly longer; $MaxDepth doesn't seem to affect the +# performance as much +# + +param( + [Alias("m")][int]$MaxDepth = 5, + [Alias("i")][int]$Iterations = 3, + [Alias("c")][bool]$ChangeLastModified +) + +function Generate-RandomStructure { + param( + [int]$Depth, + [int]$MaxDepth, + [int]$Iterations + ) + + if ($Depth -gt $MaxDepth) { + return + } + + for ($i = 0; $i -lt $Iterations; $i++) { + $randomNumber = Get-Random -Minimum 0 -Maximum 101 + + if ($randomNumber % 2 -eq 0) { + $fileName = "$([guid]::NewGuid()).txt" + Write-Host "Creating file: $fileName" + New-Item -Path "." -Name $fileName -ItemType "File" + } else { + $directoryName = "$([guid]::NewGuid()).d" + Write-Host "Creating directory: $directoryName" + New-Item -Path "." -Name $directoryName -ItemType "Directory" + + Set-Location -Path $directoryName + Generate-RandomStructure -Depth ($Depth + 1) -MaxDepth $MaxDepth -Iterations $Iterations + Set-Location -Path ".." + } + } +} + +Generate-RandomStructure -Depth 1 -MaxDepth $MaxDepth -Iterations $Iterations + +Write-Output "Generation finished:`n`n`n`n`n`n" + +tree /F + +Write-Output "Applying random last modified date" +Get-ChildItem -Recurse -File | ForEach-Object { $_.LastWriteTime = (Get-Date).AddDays( - (Get-Random -Minimum 0 -Maximum 120)) } +