Не знаю как вы, но я храню кэш установленных пакетов, как часть бекапа системы.
Вот тут понадобилось узнать все ли пакеты сохраняются, но штатной команды не нашел.
Пришлось написать маленький скриптик.

functions - библиотечка
#!/bin/bash
#
#   functions (pacman-save-sys)
#
#   Copyright (c) 2012 ArchAnTavr <archlinux@antavr.ru>;
#   http://archlinux.antavr.ru
#
#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 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 <http://www.gnu.org/licenses/>;.
#
TEXTDOMAIN="$SCRNAME"
TEXTDOMAINDIR='/usr/share/locale'
# Цвет и вид текста сообщений
BLDRED='\e[1;31m' # Red
BLDGRN='\e[1;32m' # Green
BLDYLW='\e[1;33m' # Yellow
BLDBLU='\e[1;34m' # Blue
BLDWHT='\e[1;37m' # White
TXTRST='\e[0m'    # Text Reset
# Параметры по умолчанию
D_PACMANCONF='/etc/pacman.conf'
# Пути укаываются без последнего слеша, кроме '/'
D_PACMANROOT='/'
D_PACMANDB='/var/lib/pacman'
D_PACMANCACHE='/var/cache/pacman/pkg'
T_PACMANCONF=
T_PACMANROOT=
T_PACMANDB=
T_PACMANCACHE=
PACMANCONF=$D_PACMANCONF
PACMANROOT=$D_PACMANROOT
PACMANDB=$D_PACMANDB
PACMANCACHE=$D_PACMANCACHE
PACMANOPT=
PROOT=
OPTION=
OPTARG=
echo_help1()
{
  echo -e "${BLDYLW}$(gettext "Использование: $SCRNAME <опции> [...]")${TXTRST}" >&2
  echo -e "${BLDWHT}$(gettext 'ОПЦИИ:')${TXTRST}" >&2
  echo -e "\t${BLDWHT}-h${TXTRST}
\t\t$(gettext 'вывод помощи')\n" >&2
  echo -e "\t${BLDWHT}-p <file>${TXTRST}
\t\t$(gettext 'использовать альтернативный конфигурационный файл')
\t\t\t$(gettext 'по умолчанию:') $D_PACMANCONF\n" >&2
  echo -e "\t${BLDWHT}-r <dir>${TXTRST}
\t\t$(gettext 'указать альтернативный корневой каталог')
\t\t\t$(gettext 'по умолчанию:') $D_PACMANROOT\n" >&2
  echo -e "\t${BLDWHT}-b <dir>${TXTRST}
\t\t$(gettext 'указать альтернативное расположение базы данных')
\t\t\t$(gettext 'по умолчанию:') $D_PACMANDB\n" >&2
  echo -e "\t${BLDWHT}-e <dir>${TXTRST}
\t\t$(gettext 'указать альтернативное расположение кэша')
\t\t\t$(gettext 'по умолчанию:') $D_PACMANCACHE\n" >&2
}
# Убираем из пути последний слеш если он не единственный
delslpath()
{
  if [ "$1" == '/' ]
  then
    echo -n "/"
  else
    echo -n "$1" | sed 's/\/$//g'
  fi
}
# Получаем параметр из конфига
getcfgopt()
{
  local TEMP=$(grep -e "^$2" "$1" \
    | awk -F '=' '{print $2}' \
    | sed 's/^[ \t]*//;s/[ \t]*$//')
  echo -n "$(delslpath "$TEMP")"
}
# Проверяем параметры
choption()
{
  local OPTARG="$2"
  case "$1" in
    p)
        if [ ! -f "$OPTARG" ]
        then
          echo -e "${BLDRED}$(gettext 'Ошибка!!!')${TXTRST} $(gettext 'Файл не найден') '$OPTARG'" >&2
          exit 1
        fi
        T_PACMANCONF="$OPTARG"
        ;;
    r|b|e)
        OPTARG="$(delslpath "$OPTARG")"
        if [ ! -d "$OPTARG" ]
        then
          echo -e "${BLDRED}$(gettext 'Ошибка!!!')${TXTRST} $(gettext 'Каталог не найден') '$OPTARG'" >&2
          exit 1
        fi
        case "$1" in
          r)
              T_PACMANROOT="$OPTARG"
              ;;
          b)
              T_PACMANDB="$OPTARG"
              ;;
          e)
              T_PACMANCACHE="$OPTARG"
              ;;
        esac
        ;;
    h)
        echo_help
        exit 0
        ;;
    \?)
        echo_help
        exit 1
        ;;
  esac
}
# Устанавливаем параметры
setoption()
{
# Если есть парамерт -r то устанавливаем
  if [ "$T_PACMANROOT" ]
  then
    PACMANROOT="$T_PACMANROOT"
  fi
  PROOT="$PACMANROOT"
  if [ "$PACMANROOT" ] \
    && [ "$PACMANROOT" == '/' ]
  then
    PROOT=
  fi
  if [ "$T_PACMANCONF" ]
  then
    PACMANCONF="$T_PACMANCONF"
  else
    PACMANCONF="$PROOT$PACMANCONF"
  fi
# Получаем DBPath RootDir CacheDir из конфиг файла
  local ROOT=$(getcfgopt "$PACMANCONF" 'RootDir')
  local DB=$(getcfgopt "$PACMANCONF" 'DBPath')
  local CACHE=$(getcfgopt "$PACMANCONF" 'CacheDir')
# Устанавливаем значения из параметров
  if [ "$T_PACMANROOT" ]
  then
    PACMANROOT="$T_PACMANROOT"
  else
    if [ "$ROOT" ]
    then
      PACMANROOT="$ROOT"
    fi
  fi
  PROOT="$PACMANROOT"
  if [ "$PACMANROOT" ] \
    && [ "$PACMANROOT" == '/' ]
  then
    PROOT=
  fi
  if [ "$T_PACMANDB" ]
  then
    PACMANDB="$T_PACMANDB"
  else
    if [ "$DB" ]
    then
      PACMANDB="$DB"
    fi
    PACMANDB="$PROOT$PACMANDB"
  fi
  if [ "$T_PACMANCACHE" ]
  then
    PACMANCACHE="$T_PACMANCACHE"
  else
    if [ "$CACHE" ]
    then
      PACMANCACHE="$CACHE"
    fi
    PACMANCACHE="$PROOT$PACMANCACHE"
  fi
# добавляем опции к пакмену
  if [ "$PACMANCONF" != "$D_PACMANCONF" ]
  then
    PACMANOPT+=" --config '$PACMANCONF'"
  fi
  if [ "$PACMANROOT" != "$D_PACMANROOT" ] \
    && [ "$PACMANROOT" != "$ROOT" ]
  then
    PACMANOPT+=" --root '$PACMANROOT'"
  fi
  if [ "$PACMANDB" != "$D_PACMANDB" ] \
    && [ "$PACMANDB" != "$DB" ]
  then
    PACMANOPT+=" --dbpath '$PACMANDB'"
  fi
  if [ "$PACMANCACHE" != "$D_PACMANCACHE" ] \
    && [ "$PACMANCACHE" != "$CACHE" ]
  then
    PACMANOPT+=" --cachedir '$PACMANCACHE'"
  fi
}

pacman-pkg-list - скрипт выводящий списки пакетов
#!/bin/bash
#
#   pacman-pkg-list (pacman-save-sys)
#
#   Copyright (c) 2012 ArchAnTavr <archlinux@antavr.ru>;
#   http://archlinux.antavr.ru
#
#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 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 <http://www.gnu.org/licenses/>;.
#
# Имя текущего скрипта
SCRNAME=$(basename "$BASH_SOURCE")
# Путь к папке со скриптом
SCRDIR=$(dirname "$BASH_SOURCE")
source "$SCRDIR/functions"
# Переключатели параметров
VER='q'
DEP='e'
LOC=0
VERCACH=0
CACHE=0
# Функция вывода помощи
echo_help()
{
  echo_help1
  echo -e "\t${BLDWHT}-v${TXTRST}
\t\t$(gettext 'выводить версии пакетов')
\t\t\t$(gettext 'по умолчанию:') $(gettext 'не выводить')\n" >&2
  echo -e "\t${BLDWHT}-c${TXTRST}
\t\t$(gettext 'вывести пакеты отсутствующие в кэше')
\t\t\t$(gettext 'по умолчанию:') $(gettext 'из базы данных')\n" >&2
  echo -e "\t${BLDWHT}-d${TXTRST}
\t\t$(gettext 'вывести пакеты установленные как зависимости')
\t\t\t$(gettext 'по умолчанию:') $(gettext 'явно установленные')\n" >&2
  echo -e "\t${BLDWHT}-l${TXTRST}
\t\t$(gettext 'вывести пакеты установленные локально или из AUR')
\t\t\t$(gettext 'по умолчанию:') $(gettext 'зарегистрированные репозитории')\n" >&2
}
# Функция проверки существования файлов из передаваемого списка в кэше
testcahe()
{
  local LINE
  echo -e "${BLDYLW}$(gettext 'проверяю существование пакетов в кэше')${TXTRST}" >&2
  while read LINE
  do
    eval "LINE=($LINE)"
    if [ ! -f "$PROOT$PACMANCACHE/"${LINE[0]}-${LINE[1]}-*.pkg.tar.[gx]z ]
    then
      if [[ $VERCACHE -ne 0 ]]
      then
        echo ${LINE[@]}
      else
        echo ${LINE[0]}
      fi
    fi
  done
}
# Функция получения списков пакетов
get_pkg()
{
  echo -e "${BLDYLW}$(gettext 'получаю список пакетов'), pacman -Qm$DEP$VER$PACMANOPT${TXTRST}" >&2
  if [[ $LOC -ne 0 ]]
  then
    eval "pacman -Qm$DEP$VER$PACMANOPT" | sort
  else
    comm -13 <(eval "pacman -Qm$DEP$VER$PACMANOPT" | sort) <(eval "pacman -Q$DEP$VER$PACMANOPT" | sort)
  fi
}
# Обработка параметров командной строки
while getopts hp:r:b:e:cvdl OPTION
do
  case $OPTION in
    h|\?|p|r|b|e)
        choption "$OPTION" "$OPTARG"
        ;;
    c)
        VER=
        CACHE=1
        ;;
    v)
        VER=
        VERCACHE=1
        ;;
    d)
        DEP='d'
        ;;
    l)
        LOC=1
        ;;
  esac
done
setoption
# Выполняем
if [[ $CACHE -ne 0 ]]
then
  get_pkg | testcahe
else
  get_pkg
fi
Скрипт умеет выводить списки пакетов установленных явно и как зависимости, как из официальных репозиториев так и локально. Так же проверяет наличие архивного файла пакета в кеше и выводит те которых в кеше нет.
Пример использования
# Списки установленных пакетов
bash pacman-pkg-list > pkg-official.list
bash pacman-pkg-list -d > pkg-official-dep.list
bash pacman-pkg-list -l > pkg-local.list
bash pacman-pkg-list -ld > pkg-local-dep.list
# Списки пакетов отсутствующих в кеше
bash pacman-pkg-list -c > pkg-no-cache-official.list
bash pacman-pkg-list -cd > pkg-no-cache-official-dep.list
bash pacman-pkg-list -cl > pkg-no-cache-local.list
bash pacman-pkg-list -cld > pkg-no-cache-local-dep.list
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874