DUPLY(1)
π DUPLY(1) β the user manual, but make it a group chat π
okay so bestie, buckle up β this is duply(1) from the User Manuals section, and it's literally the wrapper that makes duplicity not scary. let's get into it π«Ά
β¨ VERSION β¨
this is duply version 2.5.6, and the official home is https://duply.net π
πΈ DESCRIPTION πΈ
Duply is a wrapper for the mighty duplicity magic β like, duplicity is the main character, and duply is the best friend who handles the logistics. It simplifies running duplicity with cron or straight up on the command line by:
- keeping recurring settings in profiles, one per backup job π
- enabling batch operations, e.g.
backup_verify+purge - executing pre/post scripts (and the actions can differ depending on the previous or next command, or its exit status β highkey powerful)
- precondition checking so your duplicity run is flawless β¨
For each backup job you gotta create one configuration profile. The profile folder lives under ~/.duply/<profile> (where ~ is the current user's home directory).
Hint π§: if the folder /etc/duply exists, then the profiles for the superuser root get searched & created there instead. iykyk.
π¦ USAGE π¦
first time usage (profile creation):
duply <profile> create
general usage in single or batch mode (see EXAMPLES):
duply <profile> <command>[[_|+|-]<command>[_|+|-]...] [<options>
...]
For batches, the conditional separators can also be written as pseudo commands and(+), or(-). See SEPARATORS for the deets.
Non-duply options get passed on to duplicity (see OPTIONS). And plot twist β all conf parameters can also be defined in the environment instead. π
π PROFILE π
Indicated by a path or a profile name (<profile>), which resolves to ~/.duply/<profile> (~ expands to the environment variable $HOME).
Superuser root can place profiles under /etc/duply. Just create the folder manually before running duply as superuser.
Note π: already existing profiles in root's home folder will cease to work unless they're moved to the new location manually. no cap.
example 1:
duply humbug backup
Alternatively a path might be used β super useful for quick testing, restoring or exotic locations. Shell expansion should work as usual.
Hint π: the path must contain at least one path separator/, e.g../testinstead of onlytest.
example 2:
duply ~/.duply/humbug backup
π SEPARATORS π
_(underscore) β neutral separator+(plus sign),_and_β conditional AND: the next command will only be executed if the previous one succeeded-(minus sign),_or_β conditional OR: the next command will only be executed if the previous one failed[](square brackets),_groupIn_/_groupOut_β enables grouping of commands
example:
βpre+[bkp-verify]_post' translates to
βpre_and_groupIn_bkp_or_verify_groupOut_post'
π₯ COMMANDS π₯
usageβ get the usage help textand/or/groupIn/groupOutβ pseudo commands used in batches (see SEPARATORS above)createβ creates a configuration profilebackupβ backup with pre/post script execution (batch:[pre_bkp_post]), full (iffull_if_oldermatches or no earlier backup is found), incremental (in all other cases)pre/postβ execute<profile>/pre,<profile>/postscriptsbkpβ as above but without executing pre/post scriptsfullβ force full backupincrβ force incremental backuplist [<age>]β list all files in backup (as it was at<age>, default: now)statusβ prints backup sets and chains currently in repositoryverify [<age>] [--compare-data]β list files changed, since age if givenverifyPath <rel_path_in_bkp> <local_path> [<age>] [--compare-data]β list changes of a file or folder path in backup compared to a local path, since age if givenrestore <target_path> [<age>]β restore the complete backup to<target_path>[as it was at<age>]fetch <src_path> <target_path> [<age>]β fetch single file/folder from backup [as it was at<age>]purge [<max_age>] [--force]β list outdated backup files (older than$MAX_AGE) [use--forceto actually delete these files]purgeFull [<max_full_backups>] [--force]β list outdated backup files ($MAX_FULL_BACKUPSbeing the number of full backups and associated incrementals to keep, counting in reverse chronological order) [use--forceto actually delete these files]purgeIncr [<max_fulls_with_incrs>] [--force]β list outdated incremental backups ($MAX_FULLS_WITH_INCRSbeing the number of full backups which associated incrementals will be kept, counting in reverse chronological order) [use--forceto actually delete these files]purgeAuto [--force]β convenience batch wrapper for all purge commands above.purge,purgeFull,purgeIncrare added if their conf vars were set. e.g.
MAX_AGE=1Y
MAX_FULL_BACKUPS=6
MAX_FULLS_WITH_INCR=3
in the profile conf file would result in [purge_purgeFull_purgeIncr]
cleanup [--force]β list broken backup chain files archives (e.g. after an unfinished run) [use--forceto actually delete these files]changelogβ print changelog / todo listtxt2manβ feature for package maintainers β create a manpage based on the usage output. downloadtxt2manfromhttp://mvertes.free.fr/, put it in thePATHand runduply txt2manto create a man page.versionβ show version information of duply and needed programs
π OPTIONS π
--forceβ passed to duplicity (see commands:purge,purgeFull,purgeIncr,cleanup)--previewβ do nothing but print out generated duplicity command lines--disable-encryptionβ disable encryption, overrides profile settings
β TIME FORMATS β
For all time related parameters like age, max_age etc., refer to the duplicity manpage for all available formats. Here's some examples:
2002-01-25T07:00:00+02:00 (full date time format string) 2002/3/5 (date
string YYYY/MM/DD) 12D (interval, 12 days ago) 1h78m (interval, 1 hour
78 minutes ago)
π PRE POST SCRIPTS π
Some useful internal duply variables are exported to the scripts:
PROFILE, CONFDIR, SOURCE, TARGET_URL_<PROT|HOSTPATH|USER|PASS>, GPG_<KEYS_ENC|KEY_SIGN|PW>, CMD_ERR, RUN_START, CMD_<PREV|NEXT> (previous/next command), CND_<PREV|NEXT> (condition before/after)
The CMD_* variables were introduced to allow different actions according to the command the scripts were attached to. e.g. 'pre_bkp_post_pre_verify_post' will call the pre script two times, with the CMD_NEXT variable set to 'bkp' on the first and to 'verify' on the second run. CMD_ERR holds the exit code of the CMD_PREV. π so much power
π EXAMPLES π
create profile 'humbug':
duply humbug create (don't forget to edit this new conf file)
backup 'humbug' now:
duply humbug backup
list available backup sets of profile 'humbug':
duply humbug status
list and delete outdated backups of 'humbug':
duply humbug purge --force
restore latest backup of 'humbug' to /mnt/restore:
duply humbug restore /mnt/restore
restore /etc/passwd of 'humbug' from 4 days ago to /root/pw:
duply humbug fetch etc/passwd /root/pw 4D (see "duplicity
manpage", section TIME FORMATS)
a one line batch job on 'humbug' for cron execution:
duply humbug backup_verify_purge --force
batch job to run a full backup with pre/post scripts:
duply humbug pre_full_post
π§ FILES π§
in profile folder '~/.duply/<profile>' or '/etc/duply'
confβ profile configuration filepre,postβ pre/post scripts (see above for details)gpgkey.*.ascβ exported GPG key filesexcludeβ a globbing list of included or excluded files/folders (see "duplicity manpage", section FILE SELECTION)
π IMPORTANT π
Copy the whole profile folder after the first backup to a safe place. It contains everything (duply related) needed to restore your backups. fr fr, do not skip this.
Pay attention to (possibly later added) external files such as credentials or auth files (e.g. netrc, .megarc, ssh keys) or environment variables (e.g. DPBX_ACCESS_TOKEN). It is good policy to place those in the profile folder if possible at all. e.g. in case of 'multi://' target the config .json file β Env vars should be added to duply profiles' conf file.
Keep access to these files restricted as they contain information (gpg key, passphrases etc.) to access and modify your backups. π¨
Finally: you should attempt a restore from an unrelated host to be sure you really have everything needed for restoration. like, actually do it.
Repeat these steps after all configuration changes. Some configuration options are crucial for restoration. π
π SEE ALSO π
duplicity man page duplicity(1) or http://duplicity.us/docs.html
that's the whole vibe bestie π this was duply-2.5.6, dated 19 November 2025, straight from the DUPLY(1) pages β go forth and back up your stuff, you absolute icon π
π¦ where this page comes from
- alpine 3.24: duply-doc 2.5.6-r0 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms