Premise - The intention is unclear because it has been moved. I will explain.
In the first place, the thing that was hanging was
Open an editor and paste below script into it - save the file as ~/backup-config.sh
#! /bin/bash
#
# Script for backing up configuration and package lists
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the Affero GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
# @linux-aarhus - root.nix.dk
#
# ##########################################################
# Modify as necessary
# NOTE: some files and folders contains sensitive information
# example filelist=('.bash_profile' '.bashrc' '.netrc' '.profile' '.zshrc')
filelist=('.bash_profile' '.bashrc' '.netrc' '.profile' '.zshrc')
# example folderlist=('.config' '.local' '.gnupg' '.mozilla' '.ssh' '.thunderbird')
folderlist=('.config' '.local' '.gnupg' '.mozilla' '.ssh' '.thunderbird')
# configuration file name
archive_file="dotconf.tar.gz"
# official repo package list
repo_pkg_file="repo-pkglist.txt"
# custom package list
cust_pkg_file="cust-pkglist.txt"
# Do not edit below this line - unless you know what you are doing.
# ##########################################################
SCRIPTNAME=$(basename "$0")
VERSION="0.2"
if [[ -z $1 ]]; then
echo ":: $SCRIPTNAME v$VERSION"
echo "==> missing argument: PATH"
echo "Usage:"
echo " $SCRIPTNAME /path/to/backup"
echo " Path to store output"
echo " e.g. $SCRIPTNAME /home/$USER/backup"
echo ""
exit
fi
set -e
if ! [[ -d $1 ]]; then
mkdir -p $1
fi
conf_archive="$1/$archive_file"
repo_pkg_list="$1/$repo_pkg_file"
cust_pkg_list="$1/$cust_pkg_file"
# create an archive of common hidden files and folders
if [[ -e "$conf_archive" ]]; then
# remove archive if exist
rm -f "$conf_archive"
fi
todo=""
for file in ${filelist[@]}; do
if [[ -f $file ]]; then
todo+="${file} "
fi
done
for folder in ${folderlist[@]}; do
if [[ -d ${folder} ]]; then
todo+="${folder} "
fi
done
tar -zcvf "$conf_archive" $todo
# list packages from official repo
pacman -Qqen > "$repo_pkg_list"
# list foreign packages (custom e.g. AUR)
pacman -Qqem > "$cust_pkg_list"
echo " ==> Packagelists created"
echo " --> $repo_pkg_list"
echo " --> $cust_pkg_list"
echo " ==> Config archive created"
echo " --> $conf_archive"
echo " ==> To install packages from lists"
echo " --> sudo pacman -Syu --needed - < $repo_pkg_file"
echo " ==> To restore the configuration files run"
echo " --> tar -xzf --overwrite -C $HOME $archive_file"
echo ""
I’m not good with tar. I don’t use it at all.
How can I make it work in multi-threading?
I’m only using a single CPU CORE.
PCIe4.0 NVMe to PCIe3.0 NVMe.
time tar -zcvf "$conf_archive" $todo
real 12m18.132s
-rw-r--r-- 1 13017630861 2024-10-17 04:31 dotconf.tar.gz
The .config dir/files is really big. I have about 10 browser profiles.
Do you have any good ideas?
For example, something like this.pigz .
sudo partclone.ext4 -c -s /dev/nvme0n1p7 | pigz --processes 24 > "$TARGETDIR/nvme0n1p7_🌿🌿🌿Minjaro_$(date +%m%d_%H%M)_pigz.pcl.gz" #ManjaroCinnamon