wiki/cli.borg.html
2022-07-29 15:41:17 +00:00

83 lines
25 KiB
HTML

<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width"/><meta charSet="utf-8"/><title>Command line: BorgBackup</title><script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script><script id="MathJax-script" async="" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script><script type="text/x-mathjax-config">
MathJax = {
tex: {
inlineMath: [ [&#x27;$&#x27;,&#x27;$&#x27;], [&#x27;\(&#x27;,&#x27;\)&#x27;] ],
displayMath: [ [&#x27;$$&#x27;,&#x27;$$&#x27;], [&#x27;[&#x27;,&#x27;]&#x27;] ]
},
options = {
processHtmlClass = &quot;math&quot;
}
}
</script><meta name="next-head-count" content="6"/><link rel="preload" href="/wiki/_next/static/css/52fc2ba29703df73922c.css" as="style"/><link rel="stylesheet" href="/wiki/_next/static/css/52fc2ba29703df73922c.css" data-n-g=""/><noscript data-n-css=""></noscript><link rel="preload" href="/wiki/_next/static/chunks/main-ae4733327bd95c4ac325.js" as="script"/><link rel="preload" href="/wiki/_next/static/chunks/webpack-50bee04d1dc61f8adf5b.js" as="script"/><link rel="preload" href="/wiki/_next/static/chunks/framework.9d524150d48315f49e80.js" as="script"/><link rel="preload" href="/wiki/_next/static/chunks/commons.0e1c3f9aa780c2dfe9f0.js" as="script"/><link rel="preload" href="/wiki/_next/static/chunks/pages/_app-8e3d0c58a60ec788aa69.js" as="script"/><link rel="preload" href="/wiki/_next/static/chunks/940643274e605e7596ecea1f2ff8d83317a3fb76.4841a16762f602a59f00.js" as="script"/><link rel="preload" href="/wiki/_next/static/chunks/pages/%5B%5B...slug%5D%5D-1aa198f87ede1cd0e1dc.js" as="script"/></head><body><div id="__next"><main><h1>Command line: BorgBackup</h1><section class="post-metadata"><span>Date: <!-- -->2021-05-30 21:40:24 +08:00</span><span>Date modified: <!-- -->2021-07-13 22:54:32 +08:00</span></section><nav class="toc"><ol class="toc-level toc-level-1"><li class="toc-item toc-item-h1"><a href="/wiki/cli.borg#synopsis" class="toc-link toc-link-h1">Synopsis</a></li><li class="toc-item toc-item-h1"><a href="/wiki/cli.borg#options" class="toc-link toc-link-h1">Options</a><ol class="toc-level toc-level-2"><li class="toc-item toc-item-h2"><a href="/wiki/cli.borg#repositories-and-archives" class="toc-link toc-link-h2">Repositories and archives</a></li></ol></li><li class="toc-item toc-item-h1"><a href="/wiki/cli.borg#environment-variables" class="toc-link toc-link-h1">Environment variables</a></li><li class="toc-item toc-item-h1"><a href="/wiki/cli.borg#examples" class="toc-link toc-link-h1">Examples</a><ol class="toc-level toc-level-2"><li class="toc-item toc-item-h2"><a href="/wiki/cli.borg#quickstart" class="toc-link toc-link-h2">Quickstart</a></li><li class="toc-item toc-item-h2"><a href="/wiki/cli.borg#practicing-safe-backup-script" class="toc-link toc-link-h2">Practicing safe backup script</a></li><li class="toc-item toc-item-h2"><a href="/wiki/cli.borg#an-interactive-interface-for-extracting-archives" class="toc-link toc-link-h2">An interactive interface for extracting archives</a></li></ol></li></ol></nav><p>BorgBackup is a deduplicating archiver with compression and encryption.
In other words, this is the best backup tool (as of 2021-05-30).
</p><p>In this note, we&#x27;ll be covering the following v1.1.16 and above.
</p><p>For more information, you can view <code class="inline-verbatim">borg.1</code> manual page.
It has all of the information you can possibly know about the tool, making it a perfect reference.
This note rips off a few relevant pages from there.
</p><h1 id="synopsis">Synopsis</h1><pre class="src-block"><code class="language-shell">borg [options...] [subcommand [subcommand_options...] [subcommand_positional_args...]]
</code></pre><p>Borg recommends to pass the options before the positional arguments.
It can be picky with certain subcommands output being affected from the order of the arguments but you should be safe when you do the recommended practice.
</p><h1 id="options">Options</h1><p>Borg uses a Git-style command-line interface with subcommands and some common options to choose from.
</p><ul><li><p>You can set the log level of the program with <code class="inline-verbatim">--debug</code>, <code class="inline-verbatim">--info</code>, <code class="inline-verbatim">--warning</code>, <code class="inline-verbatim">--error</code>, and <code class="inline-verbatim">--critical</code>.
</p></li><li><p><code class="inline-verbatim">-v, --verbose</code> is an alias for <code class="inline-verbatim">--info</code></p></li><li><p><code class="inline-verbatim">-p, --progress</code> shows progress information; will be slower on certain operations due to additional passing of the metadata
</p></li></ul><p>Keep in mind, Borg doesn&#x27;t have global configuration files, only per-repo configurations.
You can create configurations with a little hard work and shell scripts.
But if you want a tool that already does that, you have <a href="https://torsion.org/borgmatic/">Borgmatic</a> as an option with plain-text files in YAML format.
</p><h2 id="repositories-and-archives">Repositories and archives</h2><p>Most of the subcommands take the repository path with a certain format.
</p><pre class="src-block"><code>${REPOSITORY_URL}::${ARCHIVE_NAME}
</code></pre><pre class="src-block"><code># Points to an repo
/home/foo-dogsquared/backup
# Points to an archive named &#x27;2021-03-02&#x27; from the previous repo.
/home/foo-dogsquared/backup::2021-03-02
</code></pre><p>You can also refer to a name dynamically with placeholders.
</p><pre class="src-block"><code>/home/{user}/backup::{hostname}-{user}-{now}
</code></pre><p>For more information, you can see the related section for Borg placeholders.
Or you can run <code class="inline-code">borg help placeholders</code>.
</p><h1 id="environment-variables">Environment variables</h1><p>Borg will also take environment variables being used by most (if not all) of the subcommands.
Very useful for scripting and saving time not repeating the same arguments.
</p><ul><li><p><code class="inline-verbatim">BORG_REPO</code> - the repo URL
</p></li><li><p><code class="inline-verbatim">BORG_PASSPHRASE</code> - the repo passphrase, if it has encryption enabled
</p></li><li><p><code class="inline-verbatim">BORG_PASSCOMMAND</code> - the command used to get the passphrase
</p></li></ul><h1 id="examples">Examples</h1><p>Borg is a comprehensive tool for a comprehensive backup system.
Here are some of the real-life examples of using the program.
</p><h2 id="quickstart">Quickstart</h2><p>Just from how I imagined I would start using this tool, anyway.
</p><pre class="src-block"><code class="language-shell"># Initialize the Borg repo in the specified path with a simple passphrase.
borg init --encryption repokey ${REPO_PATH}
# Create an archive in the repo and save the documents, pictures, and videos folder.
# This will prompt you into entering the passphrase.
borg create --verbose --progress ${REPO_PATH}::{hostname}-{now:%F-%T-%z} ~/Documents ~/Pictures ~/Videos
# Entering the passphrase can be annoying so let&#x27;s save that into a variable.
# Luckily, Borg already handles this by setting BORG_PASSPHRASE.
# Thus, it will not bother us again.
BORG_PASSPHRASE=&#x27;gum cavity cabinet auditorium&#x27;
# List all of the archives saved so far.
borg list ${REPO_PATH}
# List the files in the specified archive.
borg list ${REPO_PATH}::${ARCHIVE_NAME}
# Extract only the documents folder.
borg extract --verbose --progress ${REPO_PATH}::{hostname}-{now:%F-%T-%z} ~/Documents
</code></pre><h2 id="practicing-safe-backup-script">Practicing safe backup script</h2><p>Better be safe than sorry.
Here&#x27;s the safe backup in all of its glory in Bash.
</p><pre class="src-block"><code class="language-bash">if $# -eq 1; then echo &quot;No directories and files to be saved.&quot; &amp;&amp; exit 1; fi
locations=$@
borg create --verbose --stats --compression lz4 --exclude &#x27;**/.node_modules&#x27; ::{hostname}-{now:%F-%H-%M-%S-%z} ${locations[@]}
borg check --verbose --verify-data
borg prune --verbose --keep-daily 7 --keep-hourly 7 --keep-weekly 6 --keep-monthly 6
</code></pre><p>Since the script only lets you enter arguments used for saving into the archive, you have to use environment variables.
</p><pre class="src-block"><code class="language-shell">BORG_REPO=&quot;$HOME/backups&quot; BORG_PASSCOMMAND=&#x27;gopass show misc/personal-borgbackup-repo&#x27; safe-borg-backup ~/projects ~/library ~/writings
</code></pre><h2 id="an-interactive-interface-for-extracting-archives">An interactive interface for extracting archives</h2><p>All-time favorite fzf (see <a href="/wiki/cli.fzf">Command line: fzf</a>) is required.
</p><pre class="src-block"><code class="language-bash">export BORG_PASSPHRASE=&quot;oral hygiene&quot;
export BORG_REPO=&quot;${REPO_PATH}&quot;
borg list --format=&quot;{name}{NL}&quot; \
| fzf \
| xargs --replace=&quot;{}&quot; borg extract --verbose --progress ::{}
</code></pre><section><h2>Backlinks</h2><ul><li><a href="/wiki/lang.oil">Oil shell language</a></li></ul></section></main></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"metadata":{"date":"\"2021-05-30 21:40:24 +08:00\"","date_modified":"\"2021-07-13 22:54:32 +08:00\"","language":"en","source":""},"title":"Command line: BorgBackup","hast":{"type":"root","children":[{"type":"element","tagName":"nav","properties":{"className":"toc"},"children":[{"type":"element","tagName":"ol","properties":{"className":"toc-level toc-level-1"},"children":[{"type":"element","tagName":"li","data":{"hookArgs":[{"type":"element","tagName":"h1","properties":{"id":"synopsis"},"children":[{"type":"text","value":"Synopsis"}]}]},"properties":{"className":"toc-item toc-item-h1"},"children":[{"type":"element","tagName":"a","properties":{"className":"toc-link toc-link-h1","href":"/cli.borg#synopsis"},"children":[{"type":"text","value":"Synopsis"}]}]},{"type":"element","tagName":"li","data":{"hookArgs":[{"type":"element","tagName":"h1","properties":{"id":"options"},"children":[{"type":"text","value":"Options"}]}]},"properties":{"className":"toc-item toc-item-h1"},"children":[{"type":"element","tagName":"a","properties":{"className":"toc-link toc-link-h1","href":"/cli.borg#options"},"children":[{"type":"text","value":"Options"}]},{"type":"element","tagName":"ol","properties":{"className":"toc-level toc-level-2"},"children":[{"type":"element","tagName":"li","data":{"hookArgs":[{"type":"element","tagName":"h2","properties":{"id":"repositories-and-archives"},"children":[{"type":"text","value":"Repositories and archives"}]}]},"properties":{"className":"toc-item toc-item-h2"},"children":[{"type":"element","tagName":"a","properties":{"className":"toc-link toc-link-h2","href":"/cli.borg#repositories-and-archives"},"children":[{"type":"text","value":"Repositories and archives"}]}]}]}]},{"type":"element","tagName":"li","data":{"hookArgs":[{"type":"element","tagName":"h1","properties":{"id":"environment-variables"},"children":[{"type":"text","value":"Environment variables"}]}]},"properties":{"className":"toc-item toc-item-h1"},"children":[{"type":"element","tagName":"a","properties":{"className":"toc-link toc-link-h1","href":"/cli.borg#environment-variables"},"children":[{"type":"text","value":"Environment variables"}]}]},{"type":"element","tagName":"li","data":{"hookArgs":[{"type":"element","tagName":"h1","properties":{"id":"examples"},"children":[{"type":"text","value":"Examples"}]}]},"properties":{"className":"toc-item toc-item-h1"},"children":[{"type":"element","tagName":"a","properties":{"className":"toc-link toc-link-h1","href":"/cli.borg#examples"},"children":[{"type":"text","value":"Examples"}]},{"type":"element","tagName":"ol","properties":{"className":"toc-level toc-level-2"},"children":[{"type":"element","tagName":"li","data":{"hookArgs":[{"type":"element","tagName":"h2","properties":{"id":"quickstart"},"children":[{"type":"text","value":"Quickstart"}]}]},"properties":{"className":"toc-item toc-item-h2"},"children":[{"type":"element","tagName":"a","properties":{"className":"toc-link toc-link-h2","href":"/cli.borg#quickstart"},"children":[{"type":"text","value":"Quickstart"}]}]},{"type":"element","tagName":"li","data":{"hookArgs":[{"type":"element","tagName":"h2","properties":{"id":"practicing-safe-backup-script"},"children":[{"type":"text","value":"Practicing safe backup script"}]}]},"properties":{"className":"toc-item toc-item-h2"},"children":[{"type":"element","tagName":"a","properties":{"className":"toc-link toc-link-h2","href":"/cli.borg#practicing-safe-backup-script"},"children":[{"type":"text","value":"Practicing safe backup script"}]}]},{"type":"element","tagName":"li","data":{"hookArgs":[{"type":"element","tagName":"h2","properties":{"id":"an-interactive-interface-for-extracting-archives"},"children":[{"type":"text","value":"An interactive interface for extracting archives"}]}]},"properties":{"className":"toc-item toc-item-h2"},"children":[{"type":"element","tagName":"a","properties":{"className":"toc-link toc-link-h2","href":"/cli.borg#an-interactive-interface-for-extracting-archives"},"children":[{"type":"text","value":"An interactive interface for extracting archives"}]}]}]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"BorgBackup is a deduplicating archiver with compression and encryption.\nIn other words, this is the best backup tool (as of 2021-05-30).\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In this note, we'll be covering the following v1.1.16 and above.\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"For more information, you can view "},{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"borg.1"}]},{"type":"text","value":" manual page.\nIt has all of the information you can possibly know about the tool, making it a perfect reference.\nThis note rips off a few relevant pages from there.\n"}]},{"type":"element","tagName":"h1","properties":{"id":"synopsis"},"children":[{"type":"text","value":"Synopsis"}]},{"type":"element","tagName":"pre","properties":{"className":["src-block"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-shell"]},"children":[{"type":"text","value":"borg [options...] [subcommand [subcommand_options...] [subcommand_positional_args...]]\n"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Borg recommends to pass the options before the positional arguments.\nIt can be picky with certain subcommands output being affected from the order of the arguments but you should be safe when you do the recommended practice.\n"}]},{"type":"element","tagName":"h1","properties":{"id":"options"},"children":[{"type":"text","value":"Options"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Borg uses a Git-style command-line interface with subcommands and some common options to choose from.\n"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"You can set the log level of the program with "},{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"--debug"}]},{"type":"text","value":", "},{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"--info"}]},{"type":"text","value":", "},{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"--warning"}]},{"type":"text","value":", "},{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"--error"}]},{"type":"text","value":", and "},{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"--critical"}]},{"type":"text","value":".\n"}]}]},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"-v, --verbose"}]},{"type":"text","value":" is an alias for "},{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"--info"}]}]}]},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"-p, --progress"}]},{"type":"text","value":" shows progress information; will be slower on certain operations due to additional passing of the metadata\n"}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Keep in mind, Borg doesn't have global configuration files, only per-repo configurations.\nYou can create configurations with a little hard work and shell scripts.\nBut if you want a tool that already does that, you have "},{"type":"element","tagName":"a","properties":{"href":"https://torsion.org/borgmatic/"},"children":[{"type":"text","value":"Borgmatic"}]},{"type":"text","value":" as an option with plain-text files in YAML format.\n"}]},{"type":"element","tagName":"h2","properties":{"id":"repositories-and-archives"},"children":[{"type":"text","value":"Repositories and archives"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Most of the subcommands take the repository path with a certain format.\n"}]},{"type":"element","tagName":"pre","properties":{"className":["src-block"]},"children":[{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"${REPOSITORY_URL}::${ARCHIVE_NAME}\n"}]}]},{"type":"element","tagName":"pre","properties":{"className":["src-block"]},"children":[{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"# Points to an repo\n/home/foo-dogsquared/backup\n\n# Points to an archive named '2021-03-02' from the previous repo.\n/home/foo-dogsquared/backup::2021-03-02\n"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"You can also refer to a name dynamically with placeholders.\n"}]},{"type":"element","tagName":"pre","properties":{"className":["src-block"]},"children":[{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"/home/{user}/backup::{hostname}-{user}-{now}\n"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"For more information, you can see the related section for Borg placeholders.\nOr you can run "},{"type":"element","tagName":"code","properties":{"className":["inline-code"]},"children":[{"type":"text","value":"borg help placeholders"}]},{"type":"text","value":".\n"}]},{"type":"element","tagName":"h1","properties":{"id":"environment-variables"},"children":[{"type":"text","value":"Environment variables"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Borg will also take environment variables being used by most (if not all) of the subcommands.\nVery useful for scripting and saving time not repeating the same arguments.\n"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"BORG_REPO"}]},{"type":"text","value":" - the repo URL\n"}]}]},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"BORG_PASSPHRASE"}]},{"type":"text","value":" - the repo passphrase, if it has encryption enabled\n"}]}]},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"code","properties":{"className":["inline-verbatim"]},"children":[{"type":"text","value":"BORG_PASSCOMMAND"}]},{"type":"text","value":" - the command used to get the passphrase\n"}]}]}]},{"type":"element","tagName":"h1","properties":{"id":"examples"},"children":[{"type":"text","value":"Examples"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Borg is a comprehensive tool for a comprehensive backup system.\nHere are some of the real-life examples of using the program.\n"}]},{"type":"element","tagName":"h2","properties":{"id":"quickstart"},"children":[{"type":"text","value":"Quickstart"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Just from how I imagined I would start using this tool, anyway.\n"}]},{"type":"element","tagName":"pre","properties":{"className":["src-block"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-shell"]},"children":[{"type":"text","value":"# Initialize the Borg repo in the specified path with a simple passphrase.\nborg init --encryption repokey ${REPO_PATH}\n\n# Create an archive in the repo and save the documents, pictures, and videos folder.\n# This will prompt you into entering the passphrase.\nborg create --verbose --progress ${REPO_PATH}::{hostname}-{now:%F-%T-%z} ~/Documents ~/Pictures ~/Videos\n\n# Entering the passphrase can be annoying so let's save that into a variable.\n# Luckily, Borg already handles this by setting BORG_PASSPHRASE.\n# Thus, it will not bother us again.\nBORG_PASSPHRASE='gum cavity cabinet auditorium'\n\n# List all of the archives saved so far.\nborg list ${REPO_PATH}\n\n# List the files in the specified archive.\nborg list ${REPO_PATH}::${ARCHIVE_NAME}\n\n# Extract only the documents folder.\nborg extract --verbose --progress ${REPO_PATH}::{hostname}-{now:%F-%T-%z} ~/Documents\n"}]}]},{"type":"element","tagName":"h2","properties":{"id":"practicing-safe-backup-script"},"children":[{"type":"text","value":"Practicing safe backup script"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Better be safe than sorry.\nHere's the safe backup in all of its glory in Bash.\n"}]},{"type":"element","tagName":"pre","properties":{"className":["src-block"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-bash"]},"children":[{"type":"text","value":"if $# -eq 1; then echo \"No directories and files to be saved.\" \u0026\u0026 exit 1; fi\n\nlocations=$@\n\nborg create --verbose --stats --compression lz4 --exclude '**/.node_modules' ::{hostname}-{now:%F-%H-%M-%S-%z} ${locations[@]}\nborg check --verbose --verify-data\nborg prune --verbose --keep-daily 7 --keep-hourly 7 --keep-weekly 6 --keep-monthly 6\n"}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Since the script only lets you enter arguments used for saving into the archive, you have to use environment variables.\n"}]},{"type":"element","tagName":"pre","properties":{"className":["src-block"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-shell"]},"children":[{"type":"text","value":"BORG_REPO=\"$HOME/backups\" BORG_PASSCOMMAND='gopass show misc/personal-borgbackup-repo' safe-borg-backup ~/projects ~/library ~/writings\n"}]}]},{"type":"element","tagName":"h2","properties":{"id":"an-interactive-interface-for-extracting-archives"},"children":[{"type":"text","value":"An interactive interface for extracting archives"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"All-time favorite fzf (see "},{"type":"element","tagName":"a","properties":{"href":"/cli.fzf"},"children":[{"type":"text","value":"Command line: fzf"}]},{"type":"text","value":") is required.\n"}]},{"type":"element","tagName":"pre","properties":{"className":["src-block"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-bash"]},"children":[{"type":"text","value":"export BORG_PASSPHRASE=\"oral hygiene\"\nexport BORG_REPO=\"${REPO_PATH}\"\n\nborg list --format=\"{name}{NL}\" \\\n | fzf \\\n | xargs --replace=\"{}\" borg extract --verbose --progress ::{}\n"}]}]}]},"backlinks":[{"path":"/lang.oil","title":"Oil shell language"}]},"__N_SSG":true},"page":"/[[...slug]]","query":{"slug":["cli.borg"]},"buildId":"Ie9t5zutrXP6Of75Cb5xF","assetPrefix":"/wiki","nextExport":false,"isFallback":false,"gsp":true}</script><script nomodule="" src="/wiki/_next/static/chunks/polyfills-99d808df29361cf7ffb1.js"></script><script src="/wiki/_next/static/chunks/main-ae4733327bd95c4ac325.js" async=""></script><script src="/wiki/_next/static/chunks/webpack-50bee04d1dc61f8adf5b.js" async=""></script><script src="/wiki/_next/static/chunks/framework.9d524150d48315f49e80.js" async=""></script><script src="/wiki/_next/static/chunks/commons.0e1c3f9aa780c2dfe9f0.js" async=""></script><script src="/wiki/_next/static/chunks/pages/_app-8e3d0c58a60ec788aa69.js" async=""></script><script src="/wiki/_next/static/chunks/940643274e605e7596ecea1f2ff8d83317a3fb76.4841a16762f602a59f00.js" async=""></script><script src="/wiki/_next/static/chunks/pages/%5B%5B...slug%5D%5D-1aa198f87ede1cd0e1dc.js" async=""></script><script src="/wiki/_next/static/Ie9t5zutrXP6Of75Cb5xF/_buildManifest.js" async=""></script><script src="/wiki/_next/static/Ie9t5zutrXP6Of75Cb5xF/_ssgManifest.js" async=""></script></body></html>