![]() |
Сила shell'ов
Вот написал скриптик:
Спойлер
#/bin/bash # Script for cleaning old Debian packaged # Author: Igor Pellinen (Russia) aka Igron aka tmp0000 # First, create file with Packages dpkg-scanpackages . /dev/null > Packages 2>/dev/null # Make temporary directory mkdir temp_dir_with_new_packages # Move actual files to temporary directory for i in `awk '/^Filename:/ {print $2}' Packages`; do test -f $i && mv $i ./temp_dir_with_new_packages/; done # Delete old Debian packages, they are in current directory rm -f ./*.deb # Now, after deleting old packages, we must back actual packages back to the current directory: cd ./temp_dir_with_new_packages/ for i in *.deb; do mv $i ../; done cd ../ # Remove temporary directory and packages files rmdir temp_dir_with_new_packages rm Packages Он занимается тем, что удаляет старые deb-пакеты, если существуют пакеты более новых версий. Сам знаю, что все довольно топорно и неэффективно в плане скорости (создается временная директория, туда перемещаются нужные (актуальные) пакеты, удаляются старые, затем все перемещается назад. Как можно улучшить скорость работы скрипта? |
Не прокатит такой вариант:в очищаемой папке создать файлик old-debs и при нахождении старого пакета записать в него remove /path/to/old/deb/ и интер :) и так по циклу, а потом просто запустить этот скрипт :) Или бред?
|
Код:
#!/bin/bash |
Цитата:
|
greiv, если бы он мог это сделать, то не заморачивался бы с написанием скриптов. :) Вообще, чтобы "вкурить" что он хочет автоматизировать, надо примерно знать как устроены и создаются репозитории debian/ubuntu и как там нумеруются версии пакетов.
|
rmn, а ты внимательно прочитай, что он в скобках написал - ...туда перемещаются нужные (актуальные) пакеты. Т.е. все же он их различает актуальные-то. Или он просто выразился не правильно.
|
greiv, я внимательно читал, более того - этой фигней занимался уже.
Есть каталог, в него навалена куча deb-пакетов различных версий, например, foo 0.40, foo 0.41, foo 0.41 backported. Пакетов для простоты - 1000 штук по 3-4 версии каждого. Из них в каталоге нужно оставить только "актуальные" пакеты (вроде foo 0.41). dpkg-scanpackages, грубо говоря, выдаёт список "актуальных" пакетов. Задача сводится к тому, чтобы из начального списка вычленить неактуальные, используя шелл. |
rmn, ну цель-то понятна=), раз dpkg-scanpackages такой хороший, что выплевывает список "актуальных" пакетов, то зачем нужна свистопляска с отдельными директориями и перемещениями по тысячу раз... как будто неактуальные нельзя замочиь в том же каталоге
|
greiv, мне не совсем понятно, что ты предлагаешь. Шелл-сценарий для решения задачи в студию. :)
|
Цитата:
|
Цитата:
|
Frosty, опять напилсо. попробуй его с утра запустить. :]
|
Цитата:
|
Цитата:
|
Frosty, дык .gz надо развернуть предварительно. Либо прямо в скрипте изменить строку так:
Код:
zcat Packages.gz | awk '/^Filename: / {print $2}' | sort > new.list Добавлено через 14 часов 31 минуту Frosty, все-таки решил проверить на себе код ;) чтобы 100% работало без собственноручных доводок, нужно подправить строку Код:
ls -1 ./*.deb | sort > old.list |
полностью от начала и до конца выложи скрипт, а то опять тренироваца не хочется :)
|
Цитата:
|
код
должно работать :) но проверять сейчас времени нет. |
Цитата:
Код:
frosty@frosty-desktop:~/Desktop/неозаглавленная папка$ sudo sh "/home/frosty/Desktop/неозаглавленная папка/clean" Цитата:
Цитата:
|
Frosty, скрипт написан на bash, а ты его запускаешь через sh. RTFM :)
|
Текущее время: 13:27. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot