style: cleanup formatting, spelling
- use project-custom dictionary - cleanup spelling mistakes - rename functions to conform with camelCase for spellcheck - reformat file: spacing, indentation
This commit is contained in:
		
							parent
							
								
									8b201ca047
								
							
						
					
					
						commit
						c73a3b8531
					
				
							
								
								
									
										12
									
								
								.idea/.idea.borgScripts.dir/.idea/dictionaries/asif.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								.idea/.idea.borgScripts.dir/.idea/dictionaries/asif.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| <component name="ProjectDictionaryState"> | ||||
|   <dictionary name="asif"> | ||||
|     <words> | ||||
|       <w>borgbackup</w> | ||||
|       <w>borghelper</w> | ||||
|       <w>borgvars</w> | ||||
|       <w>listall</w> | ||||
|       <w>makevars</w> | ||||
|       <w>viewarchive</w> | ||||
|     </words> | ||||
|   </dictionary> | ||||
| </component> | ||||
							
								
								
									
										8
									
								
								.idea/.idea.borgScripts.dir/.idea/indexLayout.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								.idea/.idea.borgScripts.dir/.idea/indexLayout.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="ContentModelUserStore"> | ||||
|     <attachedFolders /> | ||||
|     <explicitIncludes /> | ||||
|     <explicitExcludes /> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										7
									
								
								.idea/.idea.borgScripts.dir/.idea/riderModule.iml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.idea/.idea.borgScripts.dir/.idea/riderModule.iml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <module type="RIDER_MODULE" version="4"> | ||||
|   <component name="NewModuleRootManager"> | ||||
|     <content url="file://$MODULE_DIR$/../.." /> | ||||
|     <orderEntry type="sourceFolder" forTests="false" /> | ||||
|   </component> | ||||
| </module> | ||||
| @ -7,4 +7,7 @@ | ||||
|       <inspection_tool class="SubjectLimit" enabled="true" level="ERROR" enabled_by_default="true" /> | ||||
|     </profile> | ||||
|   </component> | ||||
|   <component name="VcsDirectoryMappings"> | ||||
|     <mapping directory="$PROJECT_DIR$" vcs="Git" /> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										299
									
								
								borghelper.sh
									
									
									
									
									
								
							
							
						
						
									
										299
									
								
								borghelper.sh
									
									
									
									
									
								
							| @ -15,15 +15,16 @@ | ||||
| trap trapExit 1 2 3 6 | ||||
| 
 | ||||
| ### functions | ||||
| cleanup () { | ||||
| cleanup() { | ||||
|     # remove borg temp directory, if it exists | ||||
|     # shellcheck disable=SC2154 | ||||
|     if [ -d "${borgBaseDir}/tmp" ]; then | ||||
|         if ! rm -rf "${borgBaseDir}/tmp" > /dev/null 2>&1; then | ||||
|         if ! rm -rf "${borgBaseDir}/tmp" >/dev/null 2>&1; then | ||||
|             consoleError 3 "Script completed successfully but could not remove temporary directory at '$borgBaseDir/tmp'. Sorry to be messy." | ||||
|         fi | ||||
|     fi | ||||
|     if [ -f "${restorePath}/touch.test" ]; then | ||||
|         if ! rm -f "${restorePath}/touch.test" > /dev/null 2>&1; then | ||||
|         if ! rm -f "${restorePath}/touch.test" >/dev/null 2>&1; then | ||||
|             consoleError 5 "Script completed successfully but could not remove test file at '$restorePath/touch.test'. Sorry to be messy." | ||||
|         fi | ||||
|     fi | ||||
| @ -37,73 +38,72 @@ consoleError() { | ||||
| 
 | ||||
| scriptHelp() { | ||||
|     printf "\n" | ||||
|     textblock "${bold}Usage: borghelper.sh [parameters]${norm}" | ||||
|     textBlock "${bold}Usage: borghelper.sh [parameters]${norm}" | ||||
|     printf "\n" | ||||
|     textblock "Simple script to read connection parameters from a flat text file and process borg 'info', 'list' and 'restore' commands without the very long command lines that are required when specifying repo names and passwords, etc." | ||||
|     textBlock "Simple script to read connection parameters from a flat text file and process borg 'info', 'list' and 'restore' commands without the very long command lines that are required when specifying repo names and passwords, etc." | ||||
|     printf "\n" | ||||
|     textblock "${magenta}The script has the following parameters:${norm}" | ||||
|     textBlock "${magenta}The script has the following parameters:${norm}" | ||||
|     printf "\n" | ||||
|     textblock "${magenta}--- Required Parameters ---${norm}" | ||||
|     textBlock "${magenta}--- Required Parameters ---${norm}" | ||||
|     printf "\n" | ||||
|     ptextblock "-v|--vars" | ||||
|     textblock "Path to the .borgvars file from which to read borg connection information. This is not required if run with '--makevars'." | ||||
|     textBlockParams "-v|--vars" | ||||
|     textBlock "Path to the .borgvars file from which to read borg connection information. This is not required if run with '--makevars'." | ||||
|     printf "\n" | ||||
|     textblock "${magenta}--- Operation Modes ---${norm}" | ||||
|     textBlock "${magenta}--- Operation Modes ---${norm}" | ||||
|     printf "\n" | ||||
|     ptextblock "--makevars" | ||||
|     textblock "Create a sample .borgvars file that you can fill in and use with this script." | ||||
|     ptextblock "-i|--info" | ||||
|     textblock "Get information about a specified borg repo archive. Requires you supply '--archive'." | ||||
|     ptextblock "-l|--list" | ||||
|     textblock "List contents of a specified borg repo archive. Requires you supply '--archive'. You can optionally specify a file/pattern to search for using '--file'." | ||||
|     ptextblock "-la|--list-all" | ||||
|     textblock "List all available archives within the repo specified in your .borgvars file." | ||||
|     ptextblock "-r|--restore" | ||||
|     textblock "Restore the specified borg repo archive/file(s). Requires you supply '--archive'." | ||||
|     textBlockParams "--makevars" | ||||
|     textBlock "Create a sample .borgvars file that you can fill in and use with this script." | ||||
|     textBlockParams "-i|--info" | ||||
|     textBlock "Get information about a specified borg repo archive. Requires you supply '--archive'." | ||||
|     textBlockParams "-l|--list" | ||||
|     textBlock "List contents of a specified borg repo archive. Requires you supply '--archive'. You can optionally specify a file/pattern to search for using '--file'." | ||||
|     textBlockParams "-la|--list-all" | ||||
|     textBlock "List all available archives within the repo specified in your .borgvars file." | ||||
|     textBlockParams "-r|--restore" | ||||
|     textBlock "Restore the specified borg repo archive/file(s). Requires you supply '--archive'." | ||||
|     printf "\n" | ||||
|     textblock "${magenta}--- Selector Parameters ---${norm}" | ||||
|     textBlock "${magenta}--- Selector Parameters ---${norm}" | ||||
|     printf "\n" | ||||
|     ptextblock "-a|--archive" | ||||
|     textblock "The archive within your borg repo you wish to work with." | ||||
|     ptextblock "--exclude" | ||||
|     textblock "Pattern (python/borg) of files to exclude from a restore operation." | ||||
|     ptextblock "-f|--file" | ||||
|     textblock "Specific file/pattern (python/borg) within an archive for which you want to restore or search. Requires that you supply '--archive'." | ||||
|     ptextblock "-p|--path" | ||||
|     textblock "Path to which you want your archive/files restored. This script will attempt to create the directory for you if it does not already exist." | ||||
|     textBlockParams "-a|--archive" | ||||
|     textBlock "The archive within your borg repo you wish to work with." | ||||
|     textBlockParams "--exclude" | ||||
|     textBlock "Pattern (python/borg) of files to exclude from a restore operation." | ||||
|     textBlockParams "-f|--file" | ||||
|     textBlock "Specific file/pattern (python/borg) within an archive for which you want to restore or search. Requires that you supply '--archive'." | ||||
|     textBlockParams "-p|--path" | ||||
|     textBlock "Path to which you want your archive/files restored. This script will attempt to create the directory for you if it does not already exist." | ||||
|     printf "\n" | ||||
|     textblock "${magenta}--- Restore Options ---${norm}" | ||||
|     textBlock "${magenta}--- Restore Options ---${norm}" | ||||
|     printf "\n" | ||||
|     ptextblock "--progress" | ||||
|     textblock "Display progress indicator during restore operations. WARNING: This can drastically slow down operations on larger archives!" | ||||
|     ptextblock "--verbose" | ||||
|     textblock "List the individual files being processed during restore operations." | ||||
|     textBlockParams "--progress" | ||||
|     textBlock "Display progress indicator during restore operations. WARNING: This can drastically slow down operations on larger archives!" | ||||
|     textBlockParams "--verbose" | ||||
|     textBlock "List the individual files being processed during restore operations." | ||||
|     printf "\n" | ||||
|     textblock "${magenta}--- Other Parameters ---${norm}" | ||||
|     textBlock "${magenta}--- Other Parameters ---${norm}" | ||||
|     printf "\n" | ||||
|     ptextblock "-h|-?|--help" | ||||
|     textblock "This help screen." | ||||
|     textBlockParams "-h|-?|--help" | ||||
|     textBlock "This help screen." | ||||
|     printf "\n" | ||||
|     exit 0 | ||||
| } | ||||
| 
 | ||||
| textblock() { | ||||
| textBlock() { | ||||
|     printf "%s\n" "$1" | fold -w "$width" -s | ||||
| } | ||||
| 
 | ||||
| ptextblock() { | ||||
| textBlockParams() { | ||||
|     printf "%s%s%s\n" "$cyan" "$1" "$norm" | ||||
| } | ||||
| 
 | ||||
| trapExit () { | ||||
| trapExit() { | ||||
|     cleanup | ||||
|     printf "%s\nScript execution terminated via signal.\n\n%s" "$err" "$norm" | ||||
|     exit 99 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| ### text formatting presets | ||||
| if command -v tput > /dev/null; then | ||||
| if command -v tput >/dev/null; then | ||||
|     bold=$(tput bold) | ||||
|     cyan=$(tput setaf 6) | ||||
|     err=$(tput bold)$(tput setaf 1) | ||||
| @ -119,11 +119,10 @@ else | ||||
|     width=80 | ||||
| fi | ||||
| 
 | ||||
| 
 | ||||
| ### pre-requisites | ||||
| 
 | ||||
| # is user root? | ||||
| if [ ! "$( id -u )" -eq 0 ]; then | ||||
| if [ ! "$(id -u)" -eq 0 ]; then | ||||
|     consoleError 1 'You must be root to run this script.' | ||||
| fi | ||||
| 
 | ||||
| @ -135,96 +134,95 @@ fi | ||||
| # process startup parameters | ||||
| while [ $# -gt 0 ]; do | ||||
|     case "$1" in | ||||
|         -a|--archive) | ||||
|             # name of backup archive | ||||
|             if [ -z "$2" ]; then | ||||
|                 consoleError 1 "Please provide the name of the backup archive you want to work with or use '--list-all' to get a full list." | ||||
|             fi | ||||
|             archiveName="$2" | ||||
|             shift | ||||
|             ;; | ||||
|         --exclude) | ||||
|             # exclude files from restore | ||||
|             if [ -z "$2" ]; then | ||||
|                 consoleError 1 "Please provide a list of exclusions in the proper borg format." | ||||
|             fi | ||||
|             exclusions="$2" | ||||
|             shift | ||||
|             ;; | ||||
|         -f|--file) | ||||
|             # specific file/pattern to restore | ||||
|             if [ -z "$2" ]; then | ||||
|                 consoleError 1 'Please provide the name of the specific file/pattern for which you want to restore or search.' | ||||
|             fi | ||||
|             fileName="$2" | ||||
|             shift | ||||
|             ;; | ||||
|         -h|-\?|--help) | ||||
|             # display help | ||||
|             scriptHelp | ||||
|             ;; | ||||
|         -i|--info) | ||||
|             # show archive information | ||||
|             operation='info' | ||||
|             ;; | ||||
|         -l|--list) | ||||
|             # list contents of specific backup | ||||
|             operation='viewarchive' | ||||
|             ;; | ||||
|     -a | --archive) | ||||
|         # name of backup archive | ||||
|         if [ -z "$2" ]; then | ||||
|             consoleError 1 "Please provide the name of the backup archive you want to work with or use '--list-all' to get a full list." | ||||
|         fi | ||||
|         archiveName="$2" | ||||
|         shift | ||||
|         ;; | ||||
|     --exclude) | ||||
|         # exclude files from restore | ||||
|         if [ -z "$2" ]; then | ||||
|             consoleError 1 "Please provide a list of exclusions in the proper borg format." | ||||
|         fi | ||||
|         exclusions="$2" | ||||
|         shift | ||||
|         ;; | ||||
|     -f | --file) | ||||
|         # specific file/pattern to restore | ||||
|         if [ -z "$2" ]; then | ||||
|             consoleError 1 'Please provide the name of the specific file/pattern for which you want to restore or search.' | ||||
|         fi | ||||
|         fileName="$2" | ||||
|         shift | ||||
|         ;; | ||||
|     -h | -\? | --help) | ||||
|         # display help | ||||
|         scriptHelp | ||||
|         ;; | ||||
|     -i | --info) | ||||
|         # show archive information | ||||
|         operation='info' | ||||
|         ;; | ||||
|     -l | --list) | ||||
|         # list contents of specific backup | ||||
|         operation='viewarchive' | ||||
|         ;; | ||||
| 
 | ||||
|         -la|--list-all) | ||||
|             # list all backup archives | ||||
|             operation='listall' | ||||
|             ;; | ||||
|         --makevars) | ||||
|             # make a borgvars template file | ||||
|             operation='makevars' | ||||
|             ;; | ||||
|         -p|--path) | ||||
|             # path to restore files | ||||
|             if [ -z "$2" ]; then | ||||
|                 consoleError 1 'Please specify a path where you want files restored.' | ||||
|             fi | ||||
|             restorePath="${2%/}" | ||||
|             shift | ||||
|             ;; | ||||
|         --progress) | ||||
|             # show progress | ||||
|             commonOptions="$commonOptions --progress" | ||||
|             ;; | ||||
|         -r|--restore) | ||||
|             # restore archive/file | ||||
|             operation='restore' | ||||
|             ;; | ||||
|         -v|--vars) | ||||
|             # location of borgvars file | ||||
|             if [ -z "$2" ]; then | ||||
|                 consoleError 1 'Please provide the path to the file with your borg connection information.' | ||||
|             elif [ ! -f "$2" ]; then | ||||
|                 consoleError 1 'The specified borg connection information file does not exist.' | ||||
|                 exit 1 | ||||
|             fi | ||||
|             varsFile="$2" | ||||
|             shift | ||||
|             ;; | ||||
|         --verbose) | ||||
|             # display each file being processed | ||||
|             restoreOptions="$restoreOptions --list" | ||||
|             ;; | ||||
|         *) | ||||
|             # invalid option | ||||
|             printf "%s\nUnknown option: %s\n" "$err" "$1" | ||||
|             printf "Use '--help' for valid options.\n\n%s" "$norm" | ||||
|     -la | --list-all) | ||||
|         # list all backup archives | ||||
|         operation='listall' | ||||
|         ;; | ||||
|     --makevars) | ||||
|         # make a borgvars template file | ||||
|         operation='makevars' | ||||
|         ;; | ||||
|     -p | --path) | ||||
|         # path to restore files | ||||
|         if [ -z "$2" ]; then | ||||
|             consoleError 1 'Please specify a path where you want files restored.' | ||||
|         fi | ||||
|         restorePath="${2%/}" | ||||
|         shift | ||||
|         ;; | ||||
|     --progress) | ||||
|         # show progress | ||||
|         commonOptions="$commonOptions --progress" | ||||
|         ;; | ||||
|     -r | --restore) | ||||
|         # restore archive/file | ||||
|         operation='restore' | ||||
|         ;; | ||||
|     -v | --vars) | ||||
|         # location of borgvars file | ||||
|         if [ -z "$2" ]; then | ||||
|             consoleError 1 'Please provide the path to the file with your borg connection information.' | ||||
|         elif [ ! -f "$2" ]; then | ||||
|             consoleError 1 'The specified borg connection information file does not exist.' | ||||
|             exit 1 | ||||
|             ;; | ||||
|         fi | ||||
|         varsFile="$2" | ||||
|         shift | ||||
|         ;; | ||||
|     --verbose) | ||||
|         # display each file being processed | ||||
|         restoreOptions="$restoreOptions --list" | ||||
|         ;; | ||||
|     *) | ||||
|         # invalid option | ||||
|         printf "%s\nUnknown option: %s\n" "$err" "$1" | ||||
|         printf "Use '--help' for valid options.\n\n%s" "$norm" | ||||
|         exit 1 | ||||
|         ;; | ||||
|     esac | ||||
|     shift | ||||
| done | ||||
| 
 | ||||
| 
 | ||||
| ### process 'makevars' operation | ||||
| if [ "$operation" = 'makevars' ]; then | ||||
|     if ! printf "sshKeyFile=\nborgBaseDir=\nborgRepo=\nborgRepoPassword=\nborgRepoKey=\nborgRemote=\n" > ./sample.borgvars; then | ||||
|     if ! printf "sshKeyFile=\nborgBaseDir=\nborgRepo=\nborgRepoPassword=\nborgRepoKey=\nborgRemote=\n" >./sample.borgvars; then | ||||
|         consoleError 4 'Could not write sample borgvars file.' | ||||
|     else | ||||
|         exit 0 | ||||
| @ -275,25 +273,25 @@ if [ "$operation" = 'restore' ]; then | ||||
|     if [ -d "$restorePath" ]; then | ||||
|         # convert to absolute path | ||||
|         restorePath=$( | ||||
|             cd "$restorePath" || \ | ||||
|             consoleError 5 'Cannot access specified restore directory.'; \ | ||||
|             cd "$restorePath" || | ||||
|                 consoleError 5 'Cannot access specified restore directory.' | ||||
|             pwd -P | ||||
|         ) | ||||
|         if ! touch "${restorePath}/touch.test" > /dev/null 2>&1; then | ||||
|         if ! touch "${restorePath}/touch.test" >/dev/null 2>&1; then | ||||
|             consoleError 5 'Cannot write to specified restore directory.' | ||||
|         fi | ||||
|     else | ||||
|         if ! mkdir -p "${restorePath}" > /dev/null 2>&1; then | ||||
|         if ! mkdir -p "${restorePath}" >/dev/null 2>&1; then | ||||
|             consoleError 5 'Cannot create specified restore directory.' | ||||
|         else | ||||
|             # convert to absolute path | ||||
|             restorePath=$( | ||||
|                 cd "$restorePath" || \ | ||||
|                 consoleError 5 'Cannot access specified restore directory.'; \ | ||||
|                 cd "$restorePath" || | ||||
|                     consoleError 5 'Cannot access specified restore directory.' | ||||
|                 pwd -P | ||||
|             ) | ||||
|             if ! touch "${restorePath}/touch.test" > /dev/null 2>&1; then | ||||
|             consoleError 5 'Cannot write to specified restore directory.' | ||||
|             if ! touch "${restorePath}/touch.test" >/dev/null 2>&1; then | ||||
|                 consoleError 5 'Cannot write to specified restore directory.' | ||||
|             fi | ||||
|         fi | ||||
|     fi | ||||
| @ -303,14 +301,16 @@ fi | ||||
| 
 | ||||
| # check if file was provided as a relative or absolute path | ||||
| case "${varsFile}" in | ||||
|     /*) | ||||
|         # absolute path, no need to rewrite variable | ||||
|         . "${varsFile}" | ||||
|         ;; | ||||
|     *) | ||||
|         # relative path, prepend './' to create absolute path | ||||
|         . "./${varsFile}" | ||||
|         ;; | ||||
| /*) | ||||
|     # absolute path, no need to rewrite variable | ||||
|     # shellcheck disable=SC1090 | ||||
|     . "${varsFile}" | ||||
|     ;; | ||||
| *) | ||||
|     # relative path, prepend './' to create absolute path | ||||
|     # shellcheck disable=SC1090 | ||||
|     . "./${varsFile}" | ||||
|     ;; | ||||
| esac | ||||
| 
 | ||||
| # verify borg base directory | ||||
| @ -322,6 +322,7 @@ fi | ||||
| export BORG_BASE_DIR="${borgBaseDir%/}" | ||||
| 
 | ||||
| ## check path to SSH keyfile | ||||
| # shellcheck disable=SC2154 | ||||
| if [ -z "${sshKeyFile}" ]; then | ||||
|     consoleError 2 "$varsFile: 'sshKeyFile' is not specified." | ||||
| elif [ ! -f "${sshKeyFile}" ]; then | ||||
| @ -330,12 +331,14 @@ fi | ||||
| export BORG_RSH="ssh -i ${sshKeyFile}" | ||||
| 
 | ||||
| # check borg repo connect string | ||||
| # shellcheck disable=SC2154 | ||||
| if [ -z "${borgRepo}" ]; then | ||||
|     consoleError 2 "$varsFile: 'borgRepo' is not specified." | ||||
| fi | ||||
| export BORG_REPO="${borgRepo}" | ||||
| 
 | ||||
| # check borg repo password | ||||
| # shellcheck disable=SC2154 | ||||
| if [ -n "${borgRepoPassword}" ]; then | ||||
|     export BORG_PASSPHRASE="${borgRepoPassword}" | ||||
| elif [ "${borgRepoPassword}" = 'none' ]; then | ||||
| @ -345,14 +348,15 @@ else | ||||
| fi | ||||
| 
 | ||||
| # check borg keyfile if supplied | ||||
| # shellcheck disable=SC2154 | ||||
| if [ -n "${borgRepoKey}" ]; then | ||||
|     export BORG_KEY_FILE="${borgRepoKey}" | ||||
| fi | ||||
| 
 | ||||
| # export borg remote path, if specified | ||||
| # shellcheck disable=SC2154 | ||||
| if [ -n "${borgRemote}" ]; then export BORG_REMOTE_PATH="${borgRemote}"; fi | ||||
| 
 | ||||
| 
 | ||||
| ### create borg temp dir: | ||||
| ## python requires a writable temporary directory when unpacking borg and | ||||
| ## executing commands.  This defaults to /tmp but many systems mount /tmp with | ||||
| @ -367,7 +371,6 @@ if [ ! -d "${borgBaseDir}/tmp" ]; then | ||||
| fi | ||||
| export TMPDIR="${borgBaseDir}/tmp" | ||||
| 
 | ||||
| 
 | ||||
| ### execute borg operations | ||||
| 
 | ||||
| # info operations | ||||
| @ -388,29 +391,31 @@ elif [ "$operation" = 'restore' ]; then | ||||
|     if [ -z "$fileName" ]; then | ||||
|         # restore entire archive | ||||
|         if [ "$exclusions" ]; then | ||||
|             # shellcheck disable=SC2086 | ||||
|             borg --show-rc ${commonOptions} extract ${restoreOptions} ::"${archiveName}" --exclude "${exclusions}" | ||||
|         else | ||||
|             # shellcheck disable=SC2086 | ||||
|             borg --show-rc ${commonOptions} extract ${restoreOptions} ::"${archiveName}" | ||||
|         fi | ||||
|     elif [ "$fileName" ]; then | ||||
|         # restore file/pattern | ||||
|         if [ "$exclusions" ]; then | ||||
|             # shellcheck disable=SC2086 | ||||
|             borg --show-rc ${commonOptions} extract ${restoreOptions} ::"${archiveName}" "${fileName}" --exclude "${exclusions}" | ||||
|         else | ||||
|             # shellcheck disable=SC2086 | ||||
|             borg --show-rc ${commonOptions} extract ${restoreOptions} ::"${archiveName}" "${fileName}" | ||||
|         fi | ||||
|     fi | ||||
| fi | ||||
| 
 | ||||
| 
 | ||||
| ### exit gracefully | ||||
| cleanup | ||||
| exit 0 | ||||
| 
 | ||||
| 
 | ||||
| ### exit codes | ||||
| # 0:    no errors, script completed successfully | ||||
| # 1:    parameter error (missing, non-existant or invalid input) | ||||
| # 1:    parameter error (missing, non-existent or invalid input) | ||||
| # 2:    parameter missing/invalid in .borgvars file | ||||
| # 3:    could not create/remove borg tmp directory | ||||
| # 4:    could not write sample borgvars file (permissions?) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user