TAR особые приемы

Бэкап файлов с одинаковым именем

Сделать бэкап всех файлов config.xml из папки /home/user/.hudson:

tar cfv /home/user/backup//jenkins_config.tgz `find /home/user/.hudson -name config.xml`

Исключение каталогов

Чтобы исключить определенные каталоги при подготовке архива надо делать так:

tar --exclude='./folder' --exclude='./upload/folder2' cvfj backup.tbz backup/

При этом надо учесть следующее - если указанный каталог содержит только файлы (без вложенных каталогов), то надо указать файлы по маске.
Например, так:

tar --create -f backup.tbz -vj --exclude='./upload/folder2/*' backup/
В этом примере сжатие будет произведено с помощью утилиты bzip.

Другой синтаксис, где можно под одним ключом указать список каталогов:

tar cvfz MyBackup.tar.gz --exclude={"/home/user/public_html/tmp","/home/user/public_html/data"} /home/user/public_html/

И, самый надежный по синтаксису, проверенный вариант:

#!/bin/bash
HOST=$(hostname)
sudo rm -f /home/cloud/${HOST}-opt-swift.tgz
sudo tar --create -f /home/cloud/${HOST}-opt-swift.tgz -z \
--exclude={\
'/root/.cache',\
'__pycache__',\
'*node_exporter*',\
'.git',\
'epoch01',\
'/root/ring/epoch15/backups',\
'bigfile',\
'/root/premlogi',\
'/root/mirror',\
'/opt/swift/src/releasenotes'}\
 /opt/swift /root
Наименование всех исключаемых каталогов можно писать без звездочек. Другой важный момент - отказ от сокращенного ввода ключей, а именно: правильнее писать сначала операцию (–create), затем указывать через ключ -f имя файла создаваемого архива, затем идет перечисление ключей (тип компрессии -z и прочее), после этого ключ --exclude и список каталогов, и, наконец, список каталогов или файлов, которые надо запаковать в архив.

Бэкап в цикле по списку

#!/bin/bash
PFC="
amavis
courier-authlib
dovecot
httpd2
opendkim
postfix
postfixadmin
postgrey
sasl2
spamassassin
"
DS=$(date +%y%m%d%H%M)

for PF in $PFC; do
   echo $PF
   #tar --append -fpf_set_$DS.tar /etc/$PF
   tar -rPv -fpf_set_$DS.tar /etc/$PF --warning=none
done
gzip pf_set_$DS.tar

Сжимать сразу не получается. Имя файла должно стоять после ключа “-f” без пробела.

Обновление версии tar

Сборка из исходников

wget https://ftp.gnu.org/gnu/tar/tar-1.32.tar.gz
tar -xzf tar-1.32.tar.gz
cd tar-1.32
configure --prefix=/bin/tar1.32 DEFAULT_RMT_DIR=/etc # if there exists a file /etc/rmt
make -j 4 # 4 is number of CPU cores available for You
sudo make install
make clean

Сменить дефолтную версию tar

$ sudo update-alternatives --install /bin/tar tar $HOME/bin/tar1.31/tar 1

Обновлено: 25.02.2025