{"id":20217418,"url":"https://github.com/windowsnt/bar","last_synced_at":"2025-10-13T16:41:37.235Z","repository":{"id":80700403,"uuid":"188446901","full_name":"WindowsNT/bar","owner":"WindowsNT","description":"A backup tool with incremental/differential updates for Windows","archived":false,"fork":false,"pushed_at":"2022-06-05T11:54:20.000Z","size":691,"stargazers_count":10,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-24T13:36:07.941Z","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":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WindowsNT.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2019-05-24T15:34:37.000Z","updated_at":"2023-12-16T19:29:51.000Z","dependencies_parsed_at":null,"dependency_job_id":"a4df95cb-16f7-44bf-b409-9e57383c4b6b","html_url":"https://github.com/WindowsNT/bar","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WindowsNT%2Fbar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WindowsNT%2Fbar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WindowsNT%2Fbar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WindowsNT%2Fbar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WindowsNT","download_url":"https://codeload.github.com/WindowsNT/bar/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248243497,"owners_count":21071054,"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","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-14T06:34:00.155Z","updated_at":"2025-10-13T16:41:37.141Z","avatar_url":"https://github.com/WindowsNT.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BAR - Backup ARchiver\n\nAn archiver with multithreading capabilities which uses remote differential compression to create differential and incremental backups.\n\n## Commands\n* a  - archive\n* d  - delete\n* cc - compare\n* e  - extract\n* ee - extract from archive folder (+ incrementals)\n* l  - list\n* s  - signature\n* t  - test\n* u  - update\n* uu - folder update\n* z  - separate\n\n\n## Archiving\n```BAR a archive.bar -r -s -x *\\.git\\* -x *.lib  c:\\folder1```\n\nOptions to \"a\" command:\n* -r\t\t\t\t: Recurse subdirectories\n* -s\t\t\t\t: Put a signature to the archive in order to use later with incremental backup\n* --threads [num]\t: Number of threads. If not used, maximum OS cores are used.\n* -o\t\t\t\t: Overwrite archive if it exists. If this is not specified, an existing archive is updated\n* -t\t\t\t\t: Test run, do not actually create the archive\n* -i [mask]\t\t\t: Add these files. By default, all files are added except those excluded by -x\n* -x [mask]\t\t\t: Exclude these files\n* --ir, --xr\t\t: Include/Exclude regex\n* -p [pwd]\t\t\t: Password. This can be used in any \"a\" , \"e\" , \"t\", \"u\" or \"uu\". The password is hashed with SHA-256 and AES-256 is used to encrypt the contents and the signature.\n* -y                : Yes to all questions\n\n\n## Generating signature\n```BAR s archive.bar```\n\nYou can use this command if the archive was not created with the -s option earlier.\n\n## List\n```BAR l archive.bar```\n\nOptions to \"l\" command:\n* -i [mask]\t\t\t: Extract these files. By default, all files are extract except those excluded by -x\n* -x [mask]\t\t\t: Exclude these files\n* --ir, --xr\t\t: Include/Exclude regex\n\n## Separate\n```BAR z archive.bar archive2.bar\n   BAR z https://www.example.com/1.bar local.bar\n```\n\nCreates an archive that only contains signatures. This is enough for incremental updates to work. Z command works also with URLs.\n\n\n## Creating an update\n```BAR u archive2.bar --incr archive.bar -r -s -x *\\.git\\* -x *.lib  c:\\folder1```\n\nNow archive2.bar contains an incremental backup from archive.bar\n\n```BAR u archive3.bar --incr archive.bar --incr archive2.bar -r -s -x *\\.git\\* -x *.lib  c:\\folder1```\n\nNow archive3.bar contains an incremental backup from archive2.bar which contains an incremental backup from archive1.bar\n\nOptions to \"u\" command are the same as \"a\" except -o. You can use also a plain signature file created with the \"z\" command.\n\n\n## Auto backup\nUse the uu option with all the parameters \"a\" supports, with a target as directory:\n\n```bar uu o:\\BACKUP\\1 -r -s -x *\\.git\\* -x *.rar -x *.dll -x *.exe c:\\somefolder```\n\nThis command will scan the target directory for backup files. If not found, a full backup will be generated.\nNext time the command is issued will generate an incremental backup on the same folder.\n\n## Auto backup to Google/One drive\nIt can use my RGF library (https://github.com/WindowsNT/rgf) to automatically backup to onedrive/google (and soon, dropbox).\n\n```bar uu google:fold\\backups\\1 --rgf r.xml -r -s -x *\\.git\\* -x *.rar -x *.dll -x *.exe c:\\somefolder```\n\nThe --rgf parameter specifies a XML file with the following format:\n\n```\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?\u003e\n\u003ce\u003e\n\t\u003ctokens\u003e\n\t\t\u003cgoogle u=\"clientid\" p=\"clientsecret\" t1=\"accesstoken\" t2=\"refreshtoken\"/\u003e\n\t\t\u003conedrive u=\"clientid\" p=\"clientsecret\" t1=\"accesstoken\" t2=\"refreshtoken\"/\u003e\n\t\u003c/tokens\u003e\n\u003c/e\u003e\n```\n\nIf you do not have an access token, BAR will use the RGF tools to request one from the server (listening by default to port 9932 on localhost)\n\n\n\n## Extract\n```BAR e archive.bar c:\\out```\n\n```BAR e archive2.bar c:\\out```\n\n```BAR e archive3.bar c:\\out```\n\nOptions to \"e\" command:\n* --threads [num]\t: Number of threads. If not used, maximum OS cores are used.\n* -t\t\t\t\t: Test run, do not actually extract\n* -i [mask]\t\t\t: Extract these files. By default, all files are extract except those excluded by -x\n* -x [mask]\t\t\t: Exclude these files\n* --ir, --xr\t\t: Include/Exclude regex\n\nYou can also use \"ee\" with a folder. This way all the archives (and their incremental backups) are extracted.\n\n\n## Delete\n\n```BAR d archive.bar *.txt *.docx```\n\nYou can also use -i and -x to delete to include/exclude items to be deleted, for example \n```BAR d archive.bar *.txt -x f11.txt``\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwindowsnt%2Fbar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwindowsnt%2Fbar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwindowsnt%2Fbar/lists"}