{"id":18910865,"url":"https://github.com/peterupfold/shadowduplicator","last_synced_at":"2025-10-05T16:56:11.629Z","repository":{"id":57165402,"uuid":"390951202","full_name":"PeterUpfold/ShadowDuplicator","owner":"PeterUpfold","description":"Create a VSS snapshot and copy files from it to a target","archived":false,"fork":false,"pushed_at":"2023-02-14T14:28:27.000Z","size":153,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-15T07:15:57.682Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PeterUpfold.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-07-30T06:06:45.000Z","updated_at":"2023-08-23T08:14:44.000Z","dependencies_parsed_at":"2024-11-08T09:46:56.043Z","dependency_job_id":"7c690eda-9196-4b70-8640-7d9dae1c1ab2","html_url":"https://github.com/PeterUpfold/ShadowDuplicator","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/PeterUpfold/ShadowDuplicator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PeterUpfold%2FShadowDuplicator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PeterUpfold%2FShadowDuplicator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PeterUpfold%2FShadowDuplicator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PeterUpfold%2FShadowDuplicator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PeterUpfold","download_url":"https://codeload.github.com/PeterUpfold/ShadowDuplicator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PeterUpfold%2FShadowDuplicator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278486278,"owners_count":25994941,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-05T02:00:06.059Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T09:46:37.420Z","updated_at":"2025-10-05T16:56:11.607Z","avatar_url":"https://github.com/PeterUpfold.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ShadowDuplicator\r\n\r\nCommand line Volume Shadow Copy backup client which has two modes:\r\n\r\n * (non-recursively) copies files from a source directory to a destination directory (provide an INI file to configure)\r\n * copies selected files provided on the command line to the destination directory (last command line argument)\r\n\r\nThis is useful for backing up files which are typically locked for reading and creating crash-consistent\r\ncopies of content, for example virtual machine hard disk files without shutting the VMs down.\r\n\r\nPerhaps this is even just a useful substitute for the lack of a `vssadmin create shadow` command on Windows\r\nclient SKUs. 😉\r\n\r\nShadowDuplicator is written in C++, working directly with the Volume Shadow Copy API and other Win32 APIs for copying files.\r\n\r\nThis software comes with no warranty and no assumptions should be made about its stability or fitness\r\nfor any particular purpose.\r\n\r\n## Licence\r\n\r\nApache 2.0. Please see `LICENSE`.\r\n\r\n## Usage\r\n\r\n    Usage: ShadowDuplicator.exe [OPTIONS] INI-FILE\r\n    \r\n    or selected files mode:\r\n\r\n    Usage: ShadowDuplicator.exe -s SOURCE [SOURCE2 [SOURCE3] ...] DEST_DIRECTORY\r\n\r\n    Whole Folder Mode Example:  ShadowDuplicator.exe -q BackupConfig.ini\r\n    Selected Files Example: ShadowDuplicator.exe -q -s SourceFile.txt SourceFile2.txt D:\\DestDirectory\r\n\r\n\r\n    Options:\r\n    -h, --help, -?, /?, --usage     Print this help message\r\n    -q                              Silence the banner and any progress messages\r\n    -s, --selected                  Selected files mode -- copy source files to the destination directory (the last command line argument)\r\n\r\n    The path to the INI file or any source file must not begin with '-'.\r\n    The INI file should be as follows:\r\n\r\n    [FileSet]\r\n    Source = C:\\Users\\Public\\Documents\r\n    Destination = D:\\test\r\n    Do not include trailing slashes in paths.\r\n\r\n    In selected-files mode, you must provide the destination directory path only.\r\n\r\n    WARNING: Copies will always overwrite items in the destination without confirmation.\r\n\r\nPlease install the [latest supported Visual C++ redistributable (x64)](https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#visual-studio-2015-2017-2019-and-2022) before trying to launch.\r\n\r\n## Exit Codes\r\n\r\nTo aid automated usage (in addition to `-q` for quiet operation), ShadowDuplicator will exit with a\r\nprocess exit code that is the Win32 error code of the last operation that failed.\r\n\r\nYou should be able to assume that when ShadowDuplicator exits with code `0`, that all copy operations\r\nhave been completed successfully.\r\n\r\nAdditionally, the following exit codes are specific to ShadowDuplicator and indicate the following\r\nconditions:\r\n\r\n| Code (hex) | Code (dec) | Constant                                 | Meaning                                                |\r\n| ---------- | ---------- | ---------------------------------------- | ------------------------------------------------------ |\r\n| 0x20000001 | 536870913  | SDEXIT_NO_DEST_DIR_SPECIFIED             | No destination directory specified on command line.    |\r\n| 0x20000002 | 536870914  | SDEXIT_NO_FIRST_FILE_IN_SOURCE           | Could not find any files in the source directory.      |\r\n| 0x20000003 | 536870915  | SDEXIT_NO_SOURCE_SPECIFIED               | No source file or directory specified on command line. |\r\n| 0x20000004 | 536870916  | SDEXIT_SOURCE_FILES_ON_DIFFERENT_VOLUMES | All source files must be on the same volume. This error is returned if this constraint is violated. |\r\n| 0x20000005 | 536870917  | SDEXIT_INVALID_ARGS                      | Arguments could not be parsed from command line. Usage message will have been displayed. |\r\n\r\n## Disclaimer\r\n\r\nThis code is **not** production quality, however, _I_ am using it in production at my own\r\nrisk. You would be using it at your own risk! I am learning how to work with Win32 APIs and work\r\nwith memory management etc. There is certainly plenty of potential for improvement of this code,\r\nbut beyond that, it may even be insecure, destructive or cause you other serious problems. There \r\nis no warranty.\r\n\r\n## Limitations\r\n\r\nRecursive copying of directories is not yet supported.\r\n\r\nFile handling is limited by `MAX_PATH`.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeterupfold%2Fshadowduplicator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeterupfold%2Fshadowduplicator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeterupfold%2Fshadowduplicator/lists"}