dar-backup 0.6.21__py3-none-any.whl → 0.7.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
dar_backup/README.md CHANGED
@@ -6,24 +6,27 @@
6
6
  [![codecov](https://codecov.io/gh/per2jensen/dar-backup/branch/main/graph/badge.svg)](https://codecov.io/gh/per2jensen/dar-backup)
7
7
  ![CI](https://github.com/per2jensen/dar-backup/actions/workflows/py-tests.yml/badge.svg)
8
8
  [![PyPI version](https://img.shields.io/pypi/v/dar-backup.svg)](https://pypi.org/project/dar-backup/)
9
- [![PyPI monthly downloads](https://img.shields.io/pypi/dm/dar-backup)](https://pypi.org/project/dar-backup/)
10
- [![Total Downloads](https://img.shields.io/badge/dynamic/json?color=blue&label=Total%20Downloads&query=total&url=https%3A%2F%2Fraw.githubusercontent.com%2Fper2jensen%2Fdar-backup%2Fmain%2Fdownloads.json)](https://pypi.org/project/dar-backup/)
9
+ [![PyPI total Downloads](https://img.shields.io/badge/dynamic/json?color=blue&label=Total%20Downloads&query=total&url=https%3A%2F%2Fraw.githubusercontent.com%2Fper2jensen%2Fdar-backup%2Fmain%2Fdownloads.json)](https://pypi.org/project/dar-backup/)
10
+ [![# clones](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/per2jensen/dar-backup/main/v2/doc/badges/badge_clones.json)](https://github.com/per2jensen/dar-backup/blob/main/v2/doc/weekly_clones.png)
11
+ [![Milestone](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/per2jensen/dar-backup/main/v2/doc/badges/milestone_badge.json)](https://github.com/per2jensen/dar-backup/blob/main/v2/doc/weekly_clones.png)
11
12
 
12
13
  The wonderful 'dar' [Disk Archiver](https://github.com/Edrusb/DAR) is used for
13
- the heavy lifting, together with the [parchive](https://github.com/Parchive/par2cmdline) suite in these scripts.
14
+ the heavy lifting, together with [parchive](https://github.com/Parchive/par2cmdline) suite in these scripts.
14
15
 
15
16
  This is the `Python` based [**version 2**](https://github.com/per2jensen/dar-backup/tree/main/v2) of `dar-backup`.
16
17
 
17
18
  ## TL;DR
18
19
 
19
- `dar-backup` is a Python-powered CLI for creating and validating full, differential, and incremental backups using dar and par2. Designed for long-term restore integrity, even on user-space filesystems like FUSE.
20
+ `dar-backup` is a Python-powered CLI for creating and validating full, differential, and incremental backups using `dar` and `par2`. Designed for long-term restore integrity, even on user-space filesystems like FUSE.
20
21
 
21
22
  ## Table of Contents
22
23
 
23
24
  - [Reliable `dar` backups wrapped in Python](#dar-backup)
24
25
  - [My use case](#my-use-case)
26
+ - [Features](#features)
25
27
  - [License](#license)
26
28
  - [Changelog version 2](https://github.com/per2jensen/dar-backup/blob/main/v2/Changelog.md)
29
+ - [Quick Guide](#quick-guide)
27
30
  - [Status](#status)
28
31
  - [GPG Signing key](#gpg-signing-key)
29
32
  - [Breaking change in version 0.6.0](#breaking-change-in-version-060)
@@ -35,7 +38,7 @@ This is the `Python` based [**version 2**](https://github.com/per2jensen/dar-bac
35
38
  - [1 - installation](#1---installation)
36
39
  - [2 - configuration](#2---configuration)
37
40
  - [3 - generate catalog databases](#3---generate-catalog-databases)
38
- - [4 - do FULL backups](#4---do-full-backups)
41
+ - [4 - give `dar-backup` a spin](#4---give-dar-backup-a-spin)
39
42
  - [5 - deactivate venv](#5---deactivate-venv)
40
43
  - [Config](#config)
41
44
  - [Config file](#config-file)
@@ -79,21 +82,22 @@ This is the `Python` based [**version 2**](https://github.com/per2jensen/dar-bac
79
82
  - [manager](#manager-options)
80
83
  - [cleanup](#cleanup-options)
81
84
  - [clean-log](#clean-log-options)
82
- - [dar-backup-systemd](#dar-backup-systemd)
83
- - [Installer](#installer)
84
- - [demo](#demo)
85
+ - [dar-backup-systemd](#dar-backup-systemd-options)
86
+ - [Installer](#installer-options)
87
+ - [demo](#demo-options)
85
88
 
86
89
  ## My use case
87
90
 
88
- I have cloud storage mounted on a directory within my home dir. The filesystem is [FUSE based](https://www.kernel.org/doc/html/latest/filesystems/fuse.html), which gives it a few special features
91
+ I needed the following:
89
92
 
90
- - a non-privileged user can perform a mount
91
- - a privileged user cannot look into the filesystem --> a backup script running as root is not suitable
93
+ - Backup my workstation to a remote server
94
+ - Backup primarily photos, home made video and different types of documents
95
+ - I have cloud storage mounted on a directory within my home dir. The filesystem is [FUSE based](https://www.kernel.org/doc/html/latest/filesystems/fuse.html), which gives it a few special features
92
96
 
93
- I needed the following:
97
+ - Backup cloud storage (cloud is convenient, but I want control over my backups)
98
+ - A non-privileged user can perform a mount
99
+ - A privileged user cannot look into the filesystem --> a backup script running as root is not suitable
94
100
 
95
- - Backup my cloud storage to something local (cloud is convenient, but I want control over my backups)
96
- - Backup primarily photos, video and different types of documents
97
101
  - Have a simple way of restoring, possibly years into the future. 'dar' fits that scenario with a single statically linked binary (kept with the archives). There is no need install/configure anything - restoring is simple and works well.
98
102
  - During backup archives must be tested and a restore test (however small) performed
99
103
  - Archives stored on a server with a reliable file system (easy to mount a directory over sshfs)
@@ -101,11 +105,252 @@ I have cloud storage mounted on a directory within my home dir. The filesystem i
101
105
 
102
106
  I do not need the encryption features of dar, as all storage is already encrypted.
103
107
 
108
+ ## Features
109
+
110
+ - The battle tested [dar](https://github.com/Edrusb/DAR) Disk Archiver is used for the actual backups - it comes highly recommended.
111
+ - Backup with test of backup and (configurable) restore tests of files with comparison to source
112
+ - [Redundancy files](#par2) created for patching bitrot of the archives (size configurable)
113
+ - Simple [backup definitions](#backup-definition-example) defining what to backup (as many as you need)
114
+ - [Backup catalogs](#dar-manager-databases) in databases, optionally on a disk different from the backups
115
+ - Flexible and precise logging
116
+ - Bash and zsh shell autocompletion for a nice CLI experience, [available completions](#shell-autocompletion):
117
+
118
+ - Options for `dar-backup`, `cleanup`, `manager`
119
+ - Backup definitions
120
+ - Archives - filtered to backup definition if given
121
+ - Catalogs - filtered to backup definition if given
122
+
123
+ - `dar-backup` is easy to install and configure.
124
+
125
+ - ✅ The author has used dar-backup since > 4 years, and has been saved multiple times.
126
+
104
127
  ## License
105
128
 
106
129
  These scripts are licensed under the GPLv3 license.
107
130
  Read more here: [GNU GPL3.0](https://www.gnu.org/licenses/gpl-3.0.en.html), or have a look at the ["LICENSE"](https://github.com/per2jensen/dar-backup/blob/main/LICENSE) file in this repository.
108
131
 
132
+ ## Quick Guide
133
+
134
+ This purpose of this quick guide is to show how `dar-backup` works in a few simple steps.
135
+
136
+ The package include a `demo`application, that can help you set up `dar-backup` quickly.
137
+
138
+ > ⚠️ **Assumption**
139
+ >
140
+ > The demo program uses these directories in your home directory:
141
+ >
142
+ > - $HOME/dar-backup
143
+ > - $HOME/.config/dar-backup
144
+ >
145
+ > It is assumed they **do not exist** before running the demo.
146
+ >
147
+ > Python **>= 3.9** is required
148
+
149
+ <br>
150
+
151
+ **Let's roll** with installation, backup, list backup content, restore & restore check
152
+
153
+ The demo is known to work on an Ubuntu 24.04 clean VM as delivered from `Multipass`
154
+
155
+ ```bash
156
+ sudo apt -y install dar par2 python3 python3-venv
157
+ INSTALL_DIR=/tmp/dar-backup
158
+ mkdir "$INSTALL_DIR"
159
+ cd "$INSTALL_DIR"
160
+ python3 -m venv venv # create the virtual environment
161
+ . venv/bin/activate # activate the virtual environment
162
+ pip install dar-backup # run pip to install `dar-backup` into the virtual environment
163
+ ```
164
+
165
+ <details>
166
+
167
+ <summary>🎯 Install details</summary>
168
+
169
+ ```bash
170
+ (venv) $ INSTALL_DIR=/tmp/dar-backup
171
+ mkdir "$INSTALL_DIR"
172
+ cd "$INSTALL_DIR"
173
+ python3 -m venv venv # create the virtual environment
174
+ . venv/bin/activate # activate the virtual environment
175
+ pip install dar-backup # run pip to install `dar-backup`
176
+ Collecting dar-backup
177
+ Downloading dar_backup-0.6.21-py3-none-any.whl.metadata (88 kB)
178
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 88.5/88.5 kB 3.7 MB/s eta 0:00:00
179
+ Collecting argcomplete>=3.6.2 (from dar-backup)
180
+ Using cached argcomplete-3.6.2-py3-none-any.whl.metadata (16 kB)
181
+ Collecting inputimeout>=1.0.4 (from dar-backup)
182
+ Using cached inputimeout-1.0.4-py3-none-any.whl.metadata (2.2 kB)
183
+ Collecting rich>=13.0.0 (from dar-backup)
184
+ Using cached rich-14.0.0-py3-none-any.whl.metadata (18 kB)
185
+ Collecting markdown-it-py>=2.2.0 (from rich>=13.0.0->dar-backup)
186
+ Using cached markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)
187
+ Collecting pygments<3.0.0,>=2.13.0 (from rich>=13.0.0->dar-backup)
188
+ Using cached pygments-2.19.1-py3-none-any.whl.metadata (2.5 kB)
189
+ Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=13.0.0->dar-backup)
190
+ Using cached mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)
191
+ Downloading dar_backup-0.6.21-py3-none-any.whl (101 kB)
192
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 101.9/101.9 kB 16.2 MB/s eta 0:00:00
193
+ Using cached argcomplete-3.6.2-py3-none-any.whl (43 kB)
194
+ Using cached inputimeout-1.0.4-py3-none-any.whl (4.6 kB)
195
+ Using cached rich-14.0.0-py3-none-any.whl (243 kB)
196
+ Using cached markdown_it_py-3.0.0-py3-none-any.whl (87 kB)
197
+ Using cached pygments-2.19.1-py3-none-any.whl (1.2 MB)
198
+ Using cached mdurl-0.1.2-py3-none-any.whl (10.0 kB)
199
+ Installing collected packages: pygments, mdurl, inputimeout, argcomplete, markdown-it-py, rich, dar-backup
200
+ Successfully installed argcomplete-3.6.2 dar-backup-0.6.21 inputimeout-1.0.4 markdown-it-py-3.0.0 mdurl-0.1.2 pygments-2.19.1 rich-14.0.0
201
+ ```
202
+
203
+ </details>
204
+
205
+ Setup the demo configurations and show a few operations
206
+
207
+ <br>
208
+
209
+ ```bash
210
+ # see reference section for options tweaking the install
211
+ demo --install
212
+
213
+ # create catalog database
214
+ manager --create-db
215
+
216
+ # do a FULL backup of the installed backup definition called `demo`
217
+ dar-backup --full-backup
218
+
219
+ # list the contents of the backup
220
+ dar-backup --list-contents $(dar-backup --list |tail -n 1 | cut -d " " -f1)
221
+ ```
222
+
223
+ <details>
224
+
225
+ <summary>🎯 --list details</summary>
226
+
227
+ ```bash
228
+ (venv) $ demo --install
229
+ Directories created.
230
+ File generated at '/home/user/.config/dar-backup/backup.d/demo'
231
+ File generated at '/home/user/.config/dar-backup/dar-backup.conf'
232
+ 1. Now run `manager --create-db` to create the catalog database.
233
+ 2. Then you can run `dar-backup --full-backup` to create a backup.
234
+ 3. List backups with `dar-backup --list`
235
+ 4. List contents of a backup with `dar-backup --list-contents <backup-name>`
236
+
237
+
238
+
239
+ (venv) $ manager --create-db
240
+ ========== Startup Settings ==========
241
+ manager.py: 0.7.1
242
+ Config file: /home/user/.config/dar-backup/dar-backup.conf
243
+ Logfile: /home/user/dar-backup/dar-backup.log
244
+ dar_manager: /home/user/.local/dar/bin/dar_manager
245
+ dar_manager v.: 1.9.0
246
+ ======================================
247
+
248
+
249
+
250
+ (venv) $ dar-backup --full-backup
251
+ ========== Startup Settings ==========
252
+ dar-backup.py: 0.7.1
253
+ dar path: /home/user/.local/dar/bin/dar
254
+ dar version: 2.7.17
255
+ Script directory: /home/user/git/dar-backup/v2/src/dar_backup
256
+ Config file: /home/user/.config/dar-backup/dar-backup.conf
257
+ .darrc location: /home/user/git/dar-backup/v2/src/dar_backup/.darrc
258
+ ======================================
259
+
260
+
261
+
262
+ (venv) $ dar-backup --list-contents $(dar-backup --list |tail -n 1 | cut -d " " -f1)
263
+ ========== Startup Settings ==========
264
+ dar-backup.py: 0.7.1
265
+ dar path: /home/user/.local/dar/bin/dar
266
+ dar version: 2.7.17
267
+ Script directory: /home/user/git/dar-backup/v2/src/dar_backup
268
+ Config file: /home/user/.config/dar-backup/dar-backup.conf
269
+ .darrc location: /home/user/git/dar-backup/v2/src/dar_backup/.darrc
270
+ ======================================
271
+ [Saved][-] [-L-][ 49%][ ] drwx------ user user 8 kio Sat May 17 13:13:59 2025 .config
272
+ [Saved][-] [-L-][ 49%][ ] drwxrwxr-x user user 8 kio Tue May 6 20:55:40 2025 .config/dar-backup
273
+ [Saved][-] [-L-][ 48%][ ] drwxrwxr-x user user 6 kio Sat May 17 13:26:21 2025 .config/dar-backup/backup.d
274
+ [Saved][ ] [-L-][ 40%][ ] -rw-rw-r-- user user 764 o Sun Feb 23 21:23:01 2025 .config/dar-backup/backup.d/media-files
275
+ [Saved][ ] [-L-][ 41%][ ] -rw-rw-r-- user user 933 o Sun Feb 23 21:23:15 2025 .config/dar-backup/backup.d/pCloudDrive
276
+ [Saved][ ] [-L-][ 48%][ ] -rw-rw-r-- user user 1 kio Sun Mar 16 10:40:29 2025 .config/dar-backup/backup.d/test
277
+ [Saved][ ] [-L-][ 48%][ ] -rw-rw-r-- user user 824 o Tue May 13 17:00:52 2025 .config/dar-backup/backup.d/default
278
+ [Saved][ ] [-L-][ 48%][ ] -rw-rw-r-- user user 1 kio Sat May 3 10:40:33 2025 .config/dar-backup/backup.d/user-homedir
279
+ [Saved][ ] [-L-][ 54%][ ] -rw-rw-r-- user user 1 kio Sat May 17 18:17:40 2025 .config/dar-backup/backup.d/demo
280
+ [Saved][ ] [-L-][ 55%][ ] -rw-rw-r-- user user 1 kio Sat May 17 18:17:40 2025 .config/dar-backup/dar-backup.conf
281
+ ```
282
+
283
+ </details>
284
+
285
+ <br>
286
+
287
+ Perform a restore and show the restored files
288
+
289
+ ```bash
290
+ # restore all files in the backup
291
+ dar-backup --restore $(dar-backup --list |tail -n 1 | cut -d " " -f1) --verbose
292
+
293
+ # prove the files have been restored to directory as configured
294
+ find $HOME/dar-backup/restore
295
+ ```
296
+
297
+ <details>
298
+
299
+ <summary>🎯 --restore details</summary>
300
+
301
+ ```bash
302
+ (venv) $ dar-backup --verbose --restore $(dar-backup --list |tail -n 1 | cut -d " " -f1)
303
+ ========== Startup Settings ==========
304
+ dar-backup.py: 0.7.1
305
+ dar path: /home/user/.local/dar/bin/dar
306
+ dar version: 2.7.17
307
+ Script directory: /home/user/git/dar-backup/v2/src/dar_backup
308
+ Config file: /home/user/.config/dar-backup/dar-backup.conf
309
+ .darrc location: /home/user/git/dar-backup/v2/src/dar_backup/.darrc
310
+ Backup.d dir: /home/user/.config/dar-backup/backup.d
311
+ Backup dir: /home/user/dar-backup/backups
312
+ Restore dir: /home/user/dar-backup/restore
313
+ Logfile location: /home/user/dar-backup/dar-backup.log
314
+ PAR2 enabled: True
315
+ --do-not-compare: False
316
+ ======================================
317
+
318
+
319
+
320
+ (venv) $ find ~/dar-backup/restore/
321
+ /home/user/dar-backup/restore/
322
+ /home/user/dar-backup/restore/.config
323
+ /home/user/dar-backup/restore/.config/dar-backup
324
+ /home/user/dar-backup/restore/.config/dar-backup/backup.d
325
+ /home/user/dar-backup/restore/.config/dar-backup/backup.d/media-files
326
+ /home/user/dar-backup/restore/.config/dar-backup/backup.d/pCloudDrive
327
+ /home/user/dar-backup/restore/.config/dar-backup/backup.d/test
328
+ /home/user/dar-backup/restore/.config/dar-backup/backup.d/default
329
+ /home/user/dar-backup/restore/.config/dar-backup/backup.d/user-homedir
330
+ /home/user/dar-backup/restore/.config/dar-backup/backup.d/demo
331
+ /home/user/dar-backup/restore/.config/dar-backup/dar-backup.conf
332
+ ```
333
+
334
+ </details>
335
+
336
+ <br>
337
+
338
+ > ✅ **Next steps**
339
+ >
340
+ > Tinker with `demo's` options:
341
+ >
342
+ > - --root-dir (perhaps $HOME)
343
+ > - --dir-to-backup (perhaps Pictures)
344
+ > - --backup-dir (perhaps /media/user/big-disk)
345
+ >
346
+ > See log file: `cat "$HOME/dar-backup/dar-backup.log"`
347
+ >
348
+ > Checkout [systemd timers and services](#generate-systemd-files)
349
+ >
350
+ > Checkout [shell autocompletion (very nice !)](#shell-autocompletion)
351
+ >
352
+ > Checkout the [reference section](#reference)
353
+
109
354
  ## Status
110
355
 
111
356
  As of August 8, 2024 I am using the alpha versions of `dar-backup` (alpha-0.5.9 onwards) in my automated backup routine.
@@ -281,7 +526,7 @@ See more [here](#gpg-signing-key).
281
526
 
282
527
  ### 1 - installation
283
528
 
284
- Installation is currently in a venv. These commands are installed in the venv:
529
+ Installation is currently in a [virtual environment](https://csguide.cs.princeton.edu/software/virtualenv) (commonly called a `venv`). These commands are installed in the venv:
285
530
 
286
531
  - dar-back
287
532
  - cleanup
@@ -293,15 +538,15 @@ Installation is currently in a venv. These commands are installed in the venv:
293
538
 
294
539
  Note:
295
540
 
296
- The module `inputimeout` is installed into the venv and used for the confirmation input (with a 30 second timeout)
541
+ The modules `inputimeout`, `rich`and `argcomplete` are installed into the venv and used by `dar-backup`
297
542
 
298
- To install, create a venv and run pip:
543
+ To install `dar-backup`, create a venv and run pip:
299
544
 
300
545
  ```bash
301
546
  mkdir $HOME/tmp
302
547
  cd $HOME/tmp
303
548
  python3 -m venv venv # create the virtual environment
304
- . venv/bin/activate # activate the virtual env
549
+ . venv/bin/activate # activate the virtual environment
305
550
  pip install dar-backup # run pip to install `dar-backup`
306
551
  ```
307
552
 
@@ -314,7 +559,7 @@ alias db=". ~/tmp/venv/bin/activate; dar-backup -v"
314
559
  drop the alias into ~/.bashrc like this:
315
560
 
316
561
  ```bash
317
- grep -qxF 'alias db=". ~/tmp/venv/bin/activate; dar-backup -v"' ~/.bashrc \
562
+ grep -qxF 'alias db="' ~/.bashrc \
318
563
  || echo 'alias db=". ~/tmp/venv/bin/activate; dar-backup -v"' >> ~/.bashrc
319
564
 
320
565
  source ~/.bashrc
@@ -333,7 +578,10 @@ See section 15 and section 16 in the supplied "LICENSE" file.
333
578
 
334
579
  ### 2 - configuration
335
580
 
336
- The dar-backup `demo` is non-destructive and stops if some of the default directories exist.
581
+ The dar-backup [demo](#demo-options) application can be used to demo how `dar-backup` works.
582
+ It creates some directories, installs a demo configuration file and puts a demo backup definition in place.
583
+
584
+ `demo` is non-destructive and stops if some of the default directories exist.
337
585
 
338
586
  Run `demo`
339
587
 
@@ -363,22 +611,32 @@ Generate the archive catalog database(s).
363
611
  manager --create-db
364
612
  ```
365
613
 
366
- ### 4 - do FULL backups
614
+ ### 4 - give dar-backup a spin
367
615
 
368
- Prereq:
369
- [Backup definitions](#backup-definition-example) are in place in BACKUP.D_DIR (see [config file](#config-file)).
616
+ The `demo` application has put a demo [backup definition](#backup-definition-example) in place in BACKUP.D_DIR (see [config file](#config-file)).
370
617
 
371
- You are ready to do backups of all your backup definitions.
618
+ You are now ready to do backups as configured in the backup definition.
619
+
620
+ Give `dar-backup`a spin:
372
621
 
373
622
  ```bash
374
- dar-backup --full-backup
623
+ dar-backup --full-backup --verbose
624
+
625
+ # list backups
626
+ dar-backup --list
627
+
628
+ # see some examples on usage
629
+ dar-backup --examples
630
+
631
+ # see the log file
632
+ cat "$HOME/dar-backup/dar-backup.log"
375
633
  ```
376
634
 
377
- If you want to see dar-backup's log entries in the terminal, use the `--log-stdout` option. This can be useful if dar-backup is started by systemd.
635
+ If you want to see dar-backup's log entries in the terminal, use the `--log-stdout` option.
378
636
 
379
637
  If you want more log messages, use the `--verbose` or `--log-level debug` for even more.
380
638
 
381
- If you want a backup of a single definition, use the `-d <backup definition>` option. The definition's name is the filename of the definition in the `backup.d` config directory.
639
+ If you want to take a backup using a single backup definition, use the `-d <backup definition>` option. The backup definition's name is the filename of the definition in the BACKUP.D_DIR (see [config file](#config-file)).
382
640
 
383
641
  ```bash
384
642
  dar-backup --full-backup -d <your backup definition>
@@ -386,7 +644,7 @@ dar-backup --full-backup -d <your backup definition>
386
644
 
387
645
  ### 5 - deactivate venv
388
646
 
389
- Deactivate the virtual environment (venv)
647
+ Deactivate the virtual environment (venv).
390
648
 
391
649
  ```bash
392
650
  deactivate
@@ -723,20 +981,20 @@ deactivate
723
981
  gives something like
724
982
 
725
983
  ```text
726
- [Saved][-] [-L-][ 0%][ ] drwxrwxr-x pj pj 2 Gio Sat May 10 14:15:07 2025 home/pj
727
- [Saved][ ] [-L-][ 93%][ ] -rw-rw-r-- pj pj 29 kio Fri May 9 16:45:38 2025 home/pj/data/2023/2023-02-11-Udstilling-Fredericia/DSC_0568.NEF.xmp
728
- [Saved][-] [-L-][ 0%][ ] drwxrwxr-x pj pj 2 Gio Fri May 9 12:49:04 2025 home/pj/data/2025
729
- [Saved][-] [-L-][ 1%][ ] drwxrwxr-x pj pj 193 Mio Thu May 8 15:59:17 2025 home/pj/data/2025/2025-05-09-Viltrox-25mm-AIR
730
- [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- pj pj 15 Mio Thu May 8 15:52:27 2025 home/pj/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0563.NEF
731
- [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- pj pj 10 Mio Thu May 8 15:52:27 2025 home/pj/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0563.JPG
732
- [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- pj pj 9 Mio Thu May 8 15:51:53 2025 home/pj/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0559.JPG
733
- [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- pj pj 16 Mio Thu May 8 15:51:45 2025 home/pj/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0558.NEF
734
- [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- pj pj 12 Mio Thu May 8 15:51:45 2025 home/pj/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0558.JPG
735
- [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- pj pj 16 Mio Thu May 8 15:51:24 2025 home/pj/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0557.NEF
736
- [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- pj pj 12 Mio Thu May 8 15:51:23 2025 home/pj/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0557.JPG
737
- [Saved][ ] [-L-][ 91%][ ] -rw-rw-r-- pj pj 22 kio Thu May 8 15:59:58 2025 home/pj/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0557.JPG.xmp
738
- [Saved][ ] [-L-][ 92%][ ] -rw-rw-r-- pj pj 30 kio Thu May 8 16:00:36 2025 home/pj/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0557.NEF.xmp
739
- [Saved][ ] [-L-][ 91%][ ] -rw-rw-r-- pj pj 22 kio Thu May 8 16:00:29 2025 home/pj/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0558.JPG.xmp
984
+ [Saved][-] [-L-][ 0%][ ] drwxrwxr-x user user 2 Gio Sat May 10 14:15:07 2025 home/user
985
+ [Saved][ ] [-L-][ 93%][ ] -rw-rw-r-- user user 29 kio Fri May 9 16:45:38 2025 home/user/data/2023/2023-02-11-Udstilling-Fredericia/DSC_0568.NEF.xmp
986
+ [Saved][-] [-L-][ 0%][ ] drwxrwxr-x user user 2 Gio Fri May 9 12:49:04 2025 home/user/data/2025
987
+ [Saved][-] [-L-][ 1%][ ] drwxrwxr-x user user 193 Mio Thu May 8 15:59:17 2025 home/user/data/2025/2025-05-09-Viltrox-25mm-AIR
988
+ [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- user user 15 Mio Thu May 8 15:52:27 2025 home/user/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0563.NEF
989
+ [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- user user 10 Mio Thu May 8 15:52:27 2025 home/user/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0563.JPG
990
+ [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- user user 9 Mio Thu May 8 15:51:53 2025 home/user/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0559.JPG
991
+ [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- user user 16 Mio Thu May 8 15:51:45 2025 home/user/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0558.NEF
992
+ [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- user user 12 Mio Thu May 8 15:51:45 2025 home/user/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0558.JPG
993
+ [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- user user 16 Mio Thu May 8 15:51:24 2025 home/user/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0557.NEF
994
+ [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- user user 12 Mio Thu May 8 15:51:23 2025 home/user/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0557.JPG
995
+ [Saved][ ] [-L-][ 91%][ ] -rw-rw-r-- user user 22 kio Thu May 8 15:59:58 2025 home/user/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0557.JPG.xmp
996
+ [Saved][ ] [-L-][ 92%][ ] -rw-rw-r-- user user 30 kio Thu May 8 16:00:36 2025 home/user/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0557.NEF.xmp
997
+ [Saved][ ] [-L-][ 91%][ ] -rw-rw-r-- user user 22 kio Thu May 8 16:00:29 2025 home/user/data/2025/2025-05-09-Viltrox-25mm-AIR/DSC_0558.JPG.xmp
740
998
  ```
741
999
 
742
1000
  ## dar file selection examples
@@ -757,26 +1015,26 @@ This happens when the shell splits the quoted string or interprets globs before
757
1015
 
758
1016
  ### select a directory
759
1017
 
760
- Select files and sub directories in `home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling`
1018
+ Select files and sub directories in `home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling`
761
1019
 
762
1020
  ```bash
763
- dar-backup --list-contents media-files_INCR_2025-05-10 --selection="-g 'home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling'"
1021
+ dar-backup --list-contents media-files_INCR_2025-05-10 --selection="-g 'home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling'"
764
1022
  ```
765
1023
 
766
1024
  gives
767
1025
 
768
1026
  ```text
769
1027
  ...
770
- [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- pj pj 29 Mio Fri May 9 10:33:42 2025 home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0572.NEF
771
- [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- pj pj 28 Mio Fri May 9 10:33:12 2025 home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0571.NEF
772
- [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- pj pj 25 Mio Fri May 9 10:33:08 2025 home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0570.NEF
773
- [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- pj pj 27 Mio Fri May 9 10:32:46 2025 home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0569.NEF
774
- [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- pj pj 27 Mio Fri May 9 10:32:46 2025 home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0568.NEF
775
- [Saved][-] [-L-][ 1%][ ] drwxrwxr-x pj pj 833 Mio Fri May 9 12:49:57 2025 home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/jpeg
776
- [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- pj pj 11 Mio Fri May 9 10:32:45 2025 home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/jpeg/Z50_0568.JPG
777
- [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- pj pj 11 Mio Fri May 9 10:32:46 2025 home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/jpeg/Z50_0569.JPG
778
- [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- pj pj 9 Mio Fri May 9 10:33:08 2025 home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/jpeg/Z50_0570.JPG
779
- [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- pj pj 13 Mio Fri May 9 10:33:12 2025 home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/jpeg/Z50_0571.JPG
1028
+ [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- user user 29 Mio Fri May 9 10:33:42 2025 home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0572.NEF
1029
+ [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- user user 28 Mio Fri May 9 10:33:12 2025 home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0571.NEF
1030
+ [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- user user 25 Mio Fri May 9 10:33:08 2025 home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0570.NEF
1031
+ [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- user user 27 Mio Fri May 9 10:32:46 2025 home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0569.NEF
1032
+ [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- user user 27 Mio Fri May 9 10:32:46 2025 home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0568.NEF
1033
+ [Saved][-] [-L-][ 1%][ ] drwxrwxr-x user user 833 Mio Fri May 9 12:49:57 2025 home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/jpeg
1034
+ [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- user user 11 Mio Fri May 9 10:32:45 2025 home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/jpeg/Z50_0568.JPG
1035
+ [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- user user 11 Mio Fri May 9 10:32:46 2025 home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/jpeg/Z50_0569.JPG
1036
+ [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- user user 9 Mio Fri May 9 10:33:08 2025 home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/jpeg/Z50_0570.JPG
1037
+ [Saved][ ] [-L-][ 1%][X] -rw-rw-r-- user user 13 Mio Fri May 9 10:33:12 2025 home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/jpeg/Z50_0571.JPG
780
1038
  ...
781
1039
  ```
782
1040
 
@@ -789,15 +1047,15 @@ dar-backup --list-contents media-files_INCR_2025-05-10 --selection="-I '*Z50*' -
789
1047
  gives something like
790
1048
 
791
1049
  ```text
792
- [Saved][-] [-L-][ 0%][ ] drwxrwxr-x pj pj 2 Gio Sat May 10 14:15:07 2025 home/pj
793
- [Saved][-] [-L-][ 0%][ ] drwxrwxr-x pj pj 2 Gio Fri May 9 12:49:04 2025 home/pj/data/2025
794
- [Saved][-] [-L-][ 1%][ ] drwxrwxr-x pj pj 193 Mio Thu May 8 15:59:17 2025 home/pj/data/2025/2025-05-09-Viltrox-25mm-AIR
795
- [Saved][-] [-L-][ 0%][ ] drwxrwxr-x pj pj 2 Gio Fri May 9 16:47:37 2025 home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling
796
- [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- pj pj 26 Mio Fri May 9 11:26:16 2025 home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0633.NEF
797
- [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- pj pj 26 Mio Fri May 9 11:26:16 2025 home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0632.NEF
798
- [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- pj pj 28 Mio Fri May 9 11:09:04 2025 home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0631.NEF
799
- [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- pj pj 29 Mio Fri May 9 11:09:03 2025 home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0630.NEF
800
- [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- pj pj 29 Mio Fri May 9 11:09:03 2025 home/pj/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0629.NEF
1050
+ [Saved][-] [-L-][ 0%][ ] drwxrwxr-x user user 2 Gio Sat May 10 14:15:07 2025 home/user
1051
+ [Saved][-] [-L-][ 0%][ ] drwxrwxr-x user user 2 Gio Fri May 9 12:49:04 2025 home/user/data/2025
1052
+ [Saved][-] [-L-][ 1%][ ] drwxrwxr-x user user 193 Mio Thu May 8 15:59:17 2025 home/user/data/2025/2025-05-09-Viltrox-25mm-AIR
1053
+ [Saved][-] [-L-][ 0%][ ] drwxrwxr-x user user 2 Gio Fri May 9 16:47:37 2025 home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling
1054
+ [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- user user 26 Mio Fri May 9 11:26:16 2025 home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0633.NEF
1055
+ [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- user user 26 Mio Fri May 9 11:26:16 2025 home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0632.NEF
1056
+ [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- user user 28 Mio Fri May 9 11:09:04 2025 home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0631.NEF
1057
+ [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- user user 29 Mio Fri May 9 11:09:03 2025 home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0630.NEF
1058
+ [Saved][ ] [-L-][ 0%][X] -rw-rw-r-- user user 29 Mio Fri May 9 11:09:03 2025 home/user/data/2025/2025-05-09-Roskilde-Nordisk-udstilling/Z50_0629.NEF
801
1059
  ...
802
1060
  ```
803
1061
 
@@ -828,9 +1086,9 @@ When restoring and using `/tmp` for --restore-dir, the restored files can be fou
828
1086
 
829
1087
  ### a single file
830
1088
 
831
- ```text
1089
+ ```bash
832
1090
  . <the virtual env>/bin/activate
833
- dar-backup --restore <archive_name> --selection "-g path/to/file"
1091
+ dar-backup --restore <archive_name> --selection="-g path/to/file"
834
1092
  deactivate
835
1093
  ```
836
1094
 
@@ -838,15 +1096,23 @@ deactivate
838
1096
 
839
1097
  ```bash
840
1098
  . <the virtual env>/bin/activate
841
- dar-backup --restore <archive_name> --selection "-g path/to/directory"
1099
+ dar-backup --restore <archive_name> --selection="-g path/to/directory"
842
1100
  deactivate
843
1101
  ```
844
1102
 
845
1103
  ### .NEF from a specific date
846
1104
 
1105
+ The backed up directory contains \*.NEF and \*.xmp files.
1106
+
1107
+ Filtering:
1108
+
1109
+ - Include files with "2024-06-16" in file name
1110
+ - Exclude files with file names ending in ".xmp"
1111
+ - Files must be in directory "home/user/tmp/LUT-play", compared to the file root (`-R`option) in the backup.
1112
+
847
1113
  ```bash
848
1114
  . <the virtual env>/bin/activate
849
- dar-backup --restore <archive_name> --selection "-X '*.xmp' -I '*2024-06-16*' -g home/pj/tmp/LUT-play"
1115
+ dar-backup --restore <archive_name> --selection="-I '*2024-06-16*' -X '*.xmp' -g home/user/tmp/LUT-play"
850
1116
  deactivate
851
1117
  ```
852
1118
 
@@ -912,13 +1178,13 @@ One way to do that, is to let dar create a FULL archive from scratch, another is
912
1178
  I do backups of my homedir. Here it is shown how a FULL archive is merged with a DIFF, creating a new FULL archive.
913
1179
 
914
1180
  ```bash
915
- dar --merge pj-homedir_FULL_2021-09-12 -A pj-homedir_FULL_2021-06-06 -@pj-homedir_DIFF_2021-08-29 -s 12G
1181
+ dar --merge user-homedir_FULL_2021-09-12 -A user-homedir_FULL_2021-06-06 -@user-homedir_DIFF_2021-08-29 -s 12G
916
1182
 
917
1183
  # test the new FULL archive
918
- dar -t pj-homedir_FULL_2021-09-12
1184
+ dar -t user-homedir_FULL_2021-09-12
919
1185
 
920
1186
  # create Par2 redundancy files
921
- for file in pj-homedir_FULL_yyyy-mm-dd.*.dar; do
1187
+ for file in user-homedir_FULL_yyyy-mm-dd.*.dar; do
922
1188
  par2 c -r5 -n1 "$file"
923
1189
  done
924
1190
  ```
@@ -1053,8 +1319,8 @@ Try auto completion in your session:
1053
1319
  eval "$(register-python-argcomplete dar-backup)"
1054
1320
  eval "$(register-python-argcomplete cleanup)"
1055
1321
  eval "$(register-python-argcomplete manager)"
1056
- complete -o nosort -C 'python -m argcomplete cleanup' cleanup
1057
- complete -o nosort -C 'python -m argcomplete manager' manager
1322
+ #complete -o nosort -C 'python -m argcomplete cleanup' cleanup
1323
+ #complete -o nosort -C 'python -m argcomplete manager' manager
1058
1324
  ```
1059
1325
 
1060
1326
  To make it persistent across sessions, add this to your ~/.bashrc:
@@ -1065,8 +1331,8 @@ eval "$(register-python-argcomplete dar-backup)"
1065
1331
  eval "$(register-python-argcomplete cleanup)"
1066
1332
  eval "$(register-python-argcomplete manager)"
1067
1333
  # This disables bash sorting, so sorting is by <backup definition> and <date>
1068
- complete -o nosort -C 'python -m argcomplete cleanup' cleanup
1069
- complete -o nosort -C 'python -m argcomplete manager' manager
1334
+ #complete -o nosort -C 'python -m argcomplete cleanup' cleanup
1335
+ #complete -o nosort -C 'python -m argcomplete manager' manager
1070
1336
  ```
1071
1337
 
1072
1338
  If you're using a virtual environment and register-python-argcomplete isn't in your global PATH, use:
@@ -1139,7 +1405,7 @@ One backup definition per file
1139
1405
  | [clean-log](#clean-log-options) | Clean up excessive log output from dar command logs |
1140
1406
  | [dar-backup-systemd](#dar-backup-systemd-options) | Generate (and optionally install) systemd timers and services for automated backups |
1141
1407
  | [installer](#installer-options) | Set up directories and optionally create catalog databases according to a config file |
1142
- | [demo](#demo-options) | Set up required directories and default config files |
1408
+ | [demo](#demo-options) | Set up required directories and config files for a demo|
1143
1409
 
1144
1410
  ### test coverage
1145
1411
 
@@ -1270,10 +1536,12 @@ Sets up `dar-backup` according to provided config file.
1270
1536
  The installer creates the necessary backup catalog databases if `--create-db` is given.
1271
1537
 
1272
1538
  ```bash
1273
- --config Sets up `dar-backup`.
1274
- --create-db Create backup catalog databases.
1275
- -v, --version Display version and licensing information.
1276
- -h, --help Displays usage info
1539
+ --config Sets up `dar-backup`.
1540
+ --create-db Create backup catalog databases. Add it to --config
1541
+ --install-autocompletion Add bash or zsh auto completion - idempotent
1542
+ --remove-autocompletion Remove the auto completion from bash or zsh
1543
+ -v, --version Display version and licensing information.
1544
+ -h, --help Displays usage info
1277
1545
  ```
1278
1546
 
1279
1547
  ### Demo options
@@ -1296,7 +1564,14 @@ Sets up demo config files:
1296
1564
  - ~/.config/dar-backup/backup.d/default
1297
1565
 
1298
1566
  ```bash
1299
- -i, --install Sets up `dar-backup`.
1300
- -v, --version Display version and licensing information.
1301
- -h, --help Displays usage info
1567
+ -i, --install Sets up `dar-backup`.
1568
+ --root-dir Specify the root directory for the backup.
1569
+ --dir-to-backup Directory to backup, relative to the root directory.
1570
+ --backup-dir Directory where backups and redundancy files are put.
1571
+ --override By default, the script will not overwrite existing files or directories.
1572
+ Use this option to override this behavior.
1573
+ --generate Generate config files and put them in /tmp/ for inspection
1574
+ without writing to $HOME.
1575
+ -v, --version Display version and licensing information.
1576
+ -h, --help Displays usage info
1302
1577
  ```
dar_backup/__about__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "0.6.21"
1
+ __version__ = "0.7.1"
2
2
 
3
3
  __license__ = '''Licensed under GNU GENERAL PUBLIC LICENSE v3, see the supplied file "LICENSE" for details.
4
4
  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW, not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.