В моем локальном репозитории , см. Ниже sup>, у меня есть много версий одних и тех же пакетов, загруженных и сохраненных в каталоге пакетов deb. Поскольку Ubuntu всегда предпочитает использовать самую высокую версию, мне не нужно загружать и использовать более ранние версии. (Все находятся в одной папке).
Как удалить более ранние версии пакетов из папки моего локального deb? Невозможно удалить их вручную. (Вы не можете просмотреть версии в тысячах файлов)
Есть идеи? !!
Может быть, скрипт, который проверяет версию каждого пакета, сохраняя более новую версию и удаляя старые, может решить этот вопрос.
Я ищу такой сценарий, или если какое-то программное обеспечение будет основано, было бы замечательно
Я сделал свой локальный репозиторий, следуя , как это делается в учебнике .
*** Локальный репозиторий - это автономное хранилище уже загруженных пакетов, поэтому вам не нужно его снова загружать) sup>
Примечание : Я не имею в виду очистку кэша загруженных пакетов, что можно сделать с помощью команды apt-get clean
.
У меня была та же проблема: Я создал локальный репозиторий с помощью способного зеркала, и этот инструмент загружает новые пакеты, но оставляет все старые пакеты на месте. Я сделал следующее к очистке мое локальное зеркало:
Перейдите к местоположению Вашей вершины Вашего зеркала (каталог, где dists и объединяют каталог, расположены, в моей установке/var/spool/apt-mirror/mirror/ftp.nl.debian.org/debian),
Создайте список всех пакетов в Вашем объединении:
find pool -type f | sort -u > files
Создайте список всех пакетов в Вашем зеркальном распределении:
grep "^Filename:" `find dists/ -name Packages`|sed "s/^.*Filename: //"|sort -u > packages
Теперь создайте разность между этими двумя файлами и преобразуйте ее в сценарий очистки:
diff files packages | sed "/^[1-9]/d;s/^< /rm /" > cleanup.sh
Выполните сгенерированный сценарий
Удостоверьтесь, что у Вас есть полномочия записи на репозитории (или выполните использование sudo). Вместо того, чтобы удалить Вас может также переместить файлы во временное местоположение.
Идея позади этого состоит в том, что можно удалить файлы, которые не упоминаются в одном из файлов Пакетов, поскольку они заменяются более новыми версиями или удерживаются от использования. Если файлы не упоминаются в файлах Пакетов, они не могут быть найдены клиентами, соединяющимися с Вашим репозиторием.
После этого я удалил старые версии тех же пакетов. Я использовал инверсию функции сканирования нескольких версий dpkg-scanpackages
.
Сначала установите dpkg-dev
пакет
sudo apt-get install dpkg-dev
Затем сгенерируйте файл с именем пакетов (будут перечислены только новые) [[ 118] без опции -m
. По умолчанию используется опция -m
.
Если у вас есть файлы .deb в папке с именем deb , запустите указанную ниже команду из родительского элемента этой папки
dpkg-scanpackages deb /dev/null 2>/dev/null | grep Filename: > filenames
Это создаст файл с именем имена файлов , в которых имена всех файлов .deb перечислены в формате Filename: deb/packagename_version.deb
.
Теперь у нас есть все имена файлов с самыми новыми версиями в файле с именем filenames
Теперь задача проста, измените скрипт на переместите все эти файлы в другую папку.
Сначала замените Filename:
на mv
sed -i 's/Filename:/mv/' filenames
Теперь создайте папку в родительском каталоге deb папка. Я назвал его самым новым (без мусора может быть хорошим; P).
Снова измените файл filenames , чтобы переместить файлы .deb во вновь созданную новейшую папку .
sed -i 's/\.deb/.deb newest/' filenames
Это сделает наши имена файлов файлом со списком mv
команд, перемещающих файлы .deb из каталога deb в новейший каталог
Теперь угадайте, что. Выполните файл filenames
sh filenames
Последний шаг - удалить папку со старыми устаревшими файлами .deb. Проверьте последнюю папку тоже в качестве предварительного предупреждения.
После установки пакетов dpkg-dev
сгенерируйте сценарий перемещения с помощью одной команды, используйте этот, перейдя в родительский файл папки .deb.
dpkg-scanpackages deb /dev/null 2>/dev/null | grep Filename: | sed 's/Filename:/mv/;s/\.deb/.deb newest/' > filenames
Затем создайте папку с именем newest и выполните файл filenames с помощью команды `sh filenames *.
этот один вкладыш удалит только старые версии тех же пакетов
запустите его как root
sudo dpkg-scanpackages /var/cache/apt/archives 2>&1 >/dev/null | grep -Po '((\/.*?deb)(?=.*?repeat;))|used that.*?\K(\/.*deb)' | xargs rm
"/ var / cache / apt / archives" замените на каталог .deb
, он очень хорошо работает в Ubuntu 12.10
Отличный обходной путь от «Анвара» (в первом ответе)! Только эту строку я бы изменил:
sed -i 's/\.deb/.deb newest/' filenames
, потому что если у вас есть пакет с именем: packagename.debian_123.deb, ваша строка заменит только первый «.deb» в этой строке, и это будет выглядеть так в конец:
packagename.deb newest_123.deb
Вместо этого возьмите эту строку, и будет заменена только последняя .deb
в каждой строке:
sed -i 's/\(.*\).deb/\1.deb newest/' filenames
В Thunar:
/var/cache/apt/archives
sudo rm /var/cache/apt/archives/customprefix*.deb