Toolbox
DirectoryCopy

DirectoryCopy

This module will copy a directory from one location to another. It will copy every file separately, so if you have a directory with a lot of files, it will take a while, but after the copy is done, you have a list of all the files that were copied and the ones that failed. Very helpful for backup or DRP (Disaster Recovery Plan) for a directory.

Installation

Import-Module -Name /path/to/DirectoryCopy

Usage

Example.ps1
$files = Get-DirectoryFiles -Path "..\secnex-auth-api\src"
Write-Host "Found $($files.Count) objects to copy!"
$result = Copy-Objects -CopyObjects $files -Destination "backup"
$failed = $result | Where-Object { $_.Success -eq $false }
$success = $result | Where-Object { $_.Success -eq $true }
Show-Results -Results $result
if ($failed.Count -gt 0) {
    Write-Host "Failed to copy $($failed.Count) objects!"
}
if ($success.Count -gt 0) {
    Write-Host "Successfully copied $($success.Count) objects!"
}

Functions

  • Get-DirectoryFiles: Get a list of files in a directory.
  • Copy-Objects: Copy a list of files to a destination directory.
  • Show-Results: Show the results of the copy operation.

Parameters

Get-DirectoryFiles

  • -Path: The path to the directory you want to copy.

Copy-Objects

  • -CopyObjects: The list of files to copy.
  • -Destination: The destination directory where the files should be copied.

Show-Results

  • -Results: The results of the copy operation.

Output

Found 28 objects to copy!
                                                                                                                        
RelativePath            Success IsDirectory FullName                                                            Hash
------------            ------- ----------- --------                                                            ----
/api                       True        True /Users/secnex/Projects/secnex-auth-api/src/api                    
/api/api.go                True       False /Users/secnex/Projects/secnex-auth-api/src/api/api.go               08CCE8FF658D0A8B595D7C8281C32A383D6538D10FD1EC03D5D50030A6AB4773
/api/middleware            True        True /Users/secnex/Projects/secnex-auth-api/src/api/middleware         
/api/middleware/auth.go    True       False /Users/secnex/Projects/secnex-auth-api/src/api/middleware/auth.go   97DE49999AC9B21770A4A53BC5BA9BF0A609631E37944F9D235296C51EFF1C0F
/api/res                   True        True /Users/secnex/Projects/secnex-auth-api/src/api/res                
/api/res/result.go         True       False /Users/secnex/Projects/secnex-auth-api/src/api/res/result.go        D59BF2C1CACFA65DA98BC123CF981DC6BEE4BD511A5F8128DB55B55132A76B84
/api/routes                True        True /Users/secnex/Projects/secnex-auth-api/src/api/routes             
/api/routes/auth.go        True       False /Users/secnex/Projects/secnex-auth-api/src/api/routes/auth.go       C2EEA538E18C4B0E951BDC6AD1730D25ABC89BAB67F9E5D51FC2392CEC1ADA5F
/api/routes/health.go      True       False /Users/secnex/Projects/secnex-auth-api/src/api/routes/health.go     6200D6EBBFB88F01410421DB5968B36B12CFF4042CAE32604F2729F39AD8993B
/api/routes/main.go        True       False /Users/secnex/Projects/secnex-auth-api/src/api/routes/main.go       3AB4F5035760307B2F17BF3213B8A64E6853A47945DAB251ED2400B433C33479
/api/routes/user.go        True       False /Users/secnex/Projects/secnex-auth-api/src/api/routes/user.go       85CBA4C70DBB721A6C9B69731B956FD38625C3DD3F2A3539529F4C0C5754C0AF
/auth                      True        True /Users/secnex/Projects/secnex-auth-api/src/auth                   
/auth/auth.go              True       False /Users/secnex/Projects/secnex-auth-api/src/auth/auth.go             9CAD6B41AE6A2E2A9C01DCB974212059B02440F3502653C7D5FF524FFB6AADF0
/auth/hash.go              True       False /Users/secnex/Projects/secnex-auth-api/src/auth/hash.go             48A3F966F9A0D434109ABDF16B84BB0DC6BC0D25CDCC85AB58B09FEBA67B59E2
/auth/utils.go             True       False /Users/secnex/Projects/secnex-auth-api/src/auth/utils.go            1018740A5C9F1F46EFCF185D311764770C1640E70B76DD52ED18E928B44FFC8D
/db                        True        True /Users/secnex/Projects/secnex-auth-api/src/db                     
/db/cnx.go                 True       False /Users/secnex/Projects/secnex-auth-api/src/db/cnx.go                93376AA82D591CE8C23671DD2E6DBADCE8126A089A284D8F2055AD488539EC98
/db/db.go                  True       False /Users/secnex/Projects/secnex-auth-api/src/db/db.go                 27448110EC4C59B1A5039D09208FE1E283630D5F2DDA36AA7B11AE250C2B576B
/gateway.pub               True       False /Users/secnex/Projects/secnex-auth-api/src/gateway.pub              8D0684A71EE50D5D52904E9FD48A33C8E0583BDAE80906ABFB5FD9141935FAC5
/go.mod                    True       False /Users/secnex/Projects/secnex-auth-api/src/go.mod                   8732A82A927203ED6E925170CA52CCE9919E22C7F2A9508C7AB0299ABD8BC456
/go.sum                    True       False /Users/secnex/Projects/secnex-auth-api/src/go.sum                   005A2B241FC2F3C11300759FC3B59FF3A6DC7B68F9DD2C63A7D483075F9441FF
/main.go                   True       False /Users/secnex/Projects/secnex-auth-api/src/main.go                  53864196879360EA28F7488A009E1739A9131AD5651CEBC4107DB0CBF5E9B3E8
/models                    True        True /Users/secnex/Projects/secnex-auth-api/src/models                 
/models/client.go          True       False /Users/secnex/Projects/secnex-auth-api/src/models/client.go         93F1C1F2A3C119C4B546F132740C858EA777DE087A920995E7D2AEE742286996
/models/user.go            True       False /Users/secnex/Projects/secnex-auth-api/src/models/user.go           21A809BC2898CC7030DB9C230AA5412CED8AD920EA02CE72E99DC2D2574E8D7A
/models/utils.go           True       False /Users/secnex/Projects/secnex-auth-api/src/models/utils.go          4F862A1044D7AE6CE7066DE735C1A96E69BE126AB9717F172FEE093EAC36CADA
/security                  True        True /Users/secnex/Projects/secnex-auth-api/src/security               
/security/sign.go          True       False /Users/secnex/Projects/secnex-auth-api/src/security/sign.go         CA9AA19374FD146D5C432D7C38A8FBC543548EF601CDE8CAB8B461C8612BC584
 
Successfully copied 28 objects!

Possible Use Cases

  • Backup or DRP (Disaster Recovery Plan) for a directory.
  • Copying files from one location to another.
  • Archiving files.

FAQ

What happens when the object exists already?

When the object exists already, the script skips the object and continues with the next object. In the result table, you can see that the object was marked as failed because it was skipped.