Archive : Add support for .archiveignore.
This commit is contained in:
parent
6ca5f00e3e
commit
02fe135ed1
|
@ -3,6 +3,7 @@ export _archive_pattern_fast="_[0-9]{12}-[[:alnum:]]{40}.tgz"
|
||||||
|
|
||||||
# Archive directories.
|
# Archive directories.
|
||||||
# All directories by default.
|
# All directories by default.
|
||||||
|
# Supports .archiveignore exclude file.
|
||||||
# Usage: archive [DIRS]
|
# Usage: archive [DIRS]
|
||||||
function archive() {
|
function archive() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
|
@ -15,8 +16,13 @@ function archive() {
|
||||||
# Parse name.
|
# Parse name.
|
||||||
local name=$(parse_pascal ${target})
|
local name=$(parse_pascal ${target})
|
||||||
|
|
||||||
|
# Exclude support.
|
||||||
|
local exclude=""
|
||||||
|
[[ -f ".archiveignore" ]] && exclude="--exclude-from=.archiveignore"
|
||||||
|
[[ -f "${target}/.archiveignore" ]] && exclude="--exclude-from=${target}/.archiveignore"
|
||||||
|
|
||||||
# create archive.
|
# create archive.
|
||||||
local hash=$(tar -c ${target} | pv -s $(/usr/bin/du -sb ${target} | awk '{print $1}') | xz -9e | tee ${name}.txz | sha1sum | cut -d\ -f1)
|
local hash=$(tar ${exclude} -c ${target} | pv -s $(/usr/bin/du -sb ${target} | awk '{print $1}') | xz -9e | tee ${name}.txz | sha1sum | cut -d\ -f1)
|
||||||
|
|
||||||
# append hash to target name.
|
# append hash to target name.
|
||||||
local new_name="${name}_${date}-${hash}.txz"
|
local new_name="${name}_${date}-${hash}.txz"
|
||||||
|
@ -28,6 +34,7 @@ function archive() {
|
||||||
|
|
||||||
# Archive using multiple threads. Uses 50% of free RAM.
|
# Archive using multiple threads. Uses 50% of free RAM.
|
||||||
# All directories by default.
|
# All directories by default.
|
||||||
|
# Supports .archiveignore exclude file.
|
||||||
# Usage: archive_mt [DIRS]
|
# Usage: archive_mt [DIRS]
|
||||||
function archive_mt() {
|
function archive_mt() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
|
@ -40,12 +47,17 @@ function archive_mt() {
|
||||||
# Parse name.
|
# Parse name.
|
||||||
local name=$(parse_pascal ${target})
|
local name=$(parse_pascal ${target})
|
||||||
|
|
||||||
|
# Exclude support.
|
||||||
|
local exclude=""
|
||||||
|
[[ -f ".archiveignore" ]] && exclude="--exclude-from=.archiveignore"
|
||||||
|
[[ -f "${target}/.archiveignore" ]] && exclude="--exclude-from=${target}/.archiveignore"
|
||||||
|
|
||||||
# Determine memory limit.
|
# Determine memory limit.
|
||||||
local mem_free=$(_mem_free)
|
local mem_free=$(_mem_free)
|
||||||
local mem_limit=$((mem_free/2))
|
local mem_limit=$((mem_free/2))
|
||||||
|
|
||||||
# create archive.
|
# create archive.
|
||||||
local hash=$(tar -c ${target} | pv -s $(/usr/bin/du -sb ${target} | awk '{print $1}') | xz -9e --threads=0 --memlimit=${mem_limit}MiB | tee ${name}.txz | sha1sum | cut -d\ -f1)
|
local hash=$(tar ${exclude} -c ${target} | pv -s $(/usr/bin/du -sb ${target} | awk '{print $1}') | xz -9e --threads=0 --memlimit=${mem_limit}MiB | tee ${name}.txz | sha1sum | cut -d\ -f1)
|
||||||
|
|
||||||
# append hash to target name.
|
# append hash to target name.
|
||||||
local new_name="${name}_${date}-${hash}.txz"
|
local new_name="${name}_${date}-${hash}.txz"
|
||||||
|
@ -57,6 +69,7 @@ function archive_mt() {
|
||||||
|
|
||||||
# Archive directories with fast compression.
|
# Archive directories with fast compression.
|
||||||
# All directories by default.
|
# All directories by default.
|
||||||
|
# Supports .archiveignore exclude file.
|
||||||
# Usage: archive_fast [DIRS]
|
# Usage: archive_fast [DIRS]
|
||||||
function archive_fast() {
|
function archive_fast() {
|
||||||
local IFS=$'\n'
|
local IFS=$'\n'
|
||||||
|
@ -70,8 +83,13 @@ function archive_fast() {
|
||||||
# Parse name.
|
# Parse name.
|
||||||
local name=$(parse_pascal "${target}")
|
local name=$(parse_pascal "${target}")
|
||||||
|
|
||||||
|
# Exclude support.
|
||||||
|
local exclude=""
|
||||||
|
[[ -f ".archiveignore" ]] && exclude="--exclude-from=.archiveignore"
|
||||||
|
[[ -f "${target}/.archiveignore" ]] && exclude="--exclude-from=${target}/.archiveignore"
|
||||||
|
|
||||||
# create archive.
|
# create archive.
|
||||||
local hash=$(tar -c "${target}" | pv -s $(/usr/bin/du -sb "${target}" | awk '{print $1}') | gzip -1 | tee "${name}".tgz | sha1sum | cut -d\ -f1)
|
local hash=$(tar ${exclude} -c "${target}" | pv -s $(/usr/bin/du -sb "${target}" | awk '{print $1}') | gzip -1 | tee "${name}".tgz | sha1sum | cut -d\ -f1)
|
||||||
|
|
||||||
# append hash to target name.
|
# append hash to target name.
|
||||||
local new_name="${name}_${date}-${hash}.tgz"
|
local new_name="${name}_${date}-${hash}.tgz"
|
||||||
|
|
|
@ -20,9 +20,9 @@ Command|Description
|
||||||
|
|
||||||
Command|Description
|
Command|Description
|
||||||
---|---
|
---|---
|
||||||
`archive [DIRS]`|Archive directories. All directories by default.
|
`archive [DIRS]`|Archive directories. All directories by default. Supports .archiveignore exclude file.
|
||||||
`archive_mt [DIRS]`|Archive using multiple threads. Uses 50% of free RAM. All directories by default.
|
`archive_mt [DIRS]`|Archive using multiple threads. Uses 50% of free RAM. All directories by default. Supports .archiveignore exclude file.
|
||||||
`archive_fast [DIRS]`|Archive directories with fast compression. All directories by default.
|
`archive_fast [DIRS]`|Archive directories with fast compression. All directories by default. Supports .archiveignore exclude file.
|
||||||
`archive_check [FILES]`|Check archives integrity. Checks all archives by default.
|
`archive_check [FILES]`|Check archives integrity. Checks all archives by default.
|
||||||
`archive_prune [NAME]`|Delete old versions of archives. All archives by default.
|
`archive_prune [NAME]`|Delete old versions of archives. All archives by default.
|
||||||
`archive_rm [FILES]`|Delete specified or all archive files.
|
`archive_rm [FILES]`|Delete specified or all archive files.
|
||||||
|
|
Reference in a new issue