Используйте параметр -C
, чтобы позволить tar chdir
войти в каталог перед началом архивирования файлов:
tar -czf archive.tar.gz -C /usr/hdp/2.6.4.0-91/spark2/jars.
Не забывайте точку в качестве последнего аргумента
Обратите внимание, что первый аргумент после аргумента f
— это имя файла для вывода архива, а следующая опция -C
принимает имя каталога в качестве аргумента (, где tar chdir
s to )и затем точка — это каталог для начала архивирования.
Как приблизительно `dpkg --получить -выборки `из резервной копии /etc и /var? решает вашу основную проблему.
Список установленных пакетов хранится в /var/lib/dpkg/status
.Найдите строки Status: install ok installed
— это указывает на то, что пакет установлен правильно.
Следующий вызов AWK извлечет имена установленных пакетов из файла status
:
awk '/^Package:/ { package = $2 }
/^Status: install ok installed/ { print package }' /path/to/status
Если система поддерживает несколько архитектур, это тоже нужно отслеживать:
awk '/^Package:/ { p = $2; i = 0 }
/^Status: install ok installed/ { i = 1 }
i && /^Architecture: all/ { print p; next }
i && /^Architecture/ { printf "%s:%s\n", p, $2 }' /path/to/status
Еще один интересный файл — /var/lib/apt/extended_states
, в котором записан флаг «автоматической установки» для установленных пакетов. Вы можете восстановить флаги, запустив что-то вроде
awk '/^Package:/ { p = $2 }
/^Architecture/ { a = $2 }
/^Auto-Installed: 1/ { printf "%s:%s\n", p, a }' /path/to/extended_states |
xargs sudo apt-mark auto
Вы можете объединить оба файла, чтобы получить список пакетов, которые были установлены вручную, и полагаться на управление зависимостями для установки автоматически -установленных пакетов (, хотя это не обязательно приведет к установке одного и того же набора пакетов):
awk 'FNR == NR && /^Package:/ { p = $2 }
/^Status: install ok installed/ { i = 1 }
FNR == NR && i && /^Architecture: all/ { ps[p] = 1; next }
FNR == NR && i && /^Architecture/ { ps[p ":" $2] = 1}
FNR != NR && /^Package:/ { p = $2 }
FNR != NR && /^Architecture:/ { a = $2 }
/^Auto-Installed: 1/ { delete ps[p ":" a] }
END { for (p in ps) print p }' /path/to/status /path/to/extended_states
См. раздел «ФАЙЛЫ» в man dpkg
:
/var/lib/dpkg/status
Statuses of available packages. This file contains information about whether a package is marked for removing or not, whether it is installed or not, etc.