Ответ
 
Опции темы
Старый 29.05.2007, 01:06      #1
tmp0000
Пользователь
Пользователь Mozilla Firefox
 
Аватар для tmp0000
По умолчанию Сила 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-пакеты, если существуют пакеты более новых версий.
Сам знаю, что все довольно топорно и неэффективно в плане скорости (создается временная директория, туда перемещаются нужные (актуальные) пакеты, удаляются старые, затем все перемещается назад.

Как можно улучшить скорость работы скрипта?
__________________
Думай головой, %username%.
tmp0000 вне форума   Ответить с цитированием Вверх
Старый 29.05.2007, 14:59      #2
Frosty
Местный
Пользователь Mozilla Firefox
 
Аватар для Frosty
По умолчанию

Не прокатит такой вариант:в очищаемой папке создать файлик old-debs и при нахождении старого пакета записать в него remove /path/to/old/deb/ и интер и так по циклу, а потом просто запустить этот скрипт Или бред?
Frosty вне форума Пол: Мужчина   Ответить с цитированием Вверх
Старый 29.05.2007, 16:46      #3
rmn
Местный
По умолчанию

Код:
#!/bin/bash

dpkg-scanpackages . /dev/null > Packages 2>/dev/null
ls -1 ./*.deb | sort > old.list
awk '/^Filename: / {print $2}' Packages | sort > new.list
diff {old,new}.list | grep '^< ' | sed 's/^< //' | xargs rm -f
rm -f {old,new}.list
так лучше ?

Последний раз редактировалось rmn; 30.05.2007 в 16:03.
rmn вне форума   Ответить с цитированием Вверх
Благодарности: 2
Сергей Копылов (29.05.2007), tmp0000 (29.05.2007)
Старый 29.05.2007, 17:36      #4
greiv
Новичок
 
Аватар для greiv
По умолчанию

Сообщение от tmp0000 Посмотреть сообщение
Вот написал скриптик:
Спойлер

#/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-пакеты, если существуют пакеты более новых версий.
Сам знаю, что все довольно топорно и неэффективно в плане скорости (создается временная директория, туда перемещаются нужные (актуальные) пакеты, удаляются старые, затем все перемещается назад.

Как можно улучшить скорость работы скрипта?
Кхм... Если ты можешь отделить старые от актуальных, то чегобы их сразу не мочить, не создавая никаких дерикторий левых и не делая не нужных перемещений.
greiv вне форума   Ответить с цитированием Вверх
Старый 29.05.2007, 17:41      #5
rmn
Местный
По умолчанию

greiv, если бы он мог это сделать, то не заморачивался бы с написанием скриптов. Вообще, чтобы "вкурить" что он хочет автоматизировать, надо примерно знать как устроены и создаются репозитории debian/ubuntu и как там нумеруются версии пакетов.

Последний раз редактировалось rmn; 29.05.2007 в 17:43.
rmn вне форума   Ответить с цитированием Вверх
Старый 29.05.2007, 18:34      #6
greiv
Новичок
 
Аватар для greiv
По умолчанию

rmn, а ты внимательно прочитай, что он в скобках написал - ...туда перемещаются нужные (актуальные) пакеты. Т.е. все же он их различает актуальные-то. Или он просто выразился не правильно.
greiv вне форума   Ответить с цитированием Вверх
Старый 29.05.2007, 18:44      #7
rmn
Местный
По умолчанию

greiv, я внимательно читал, более того - этой фигней занимался уже.

Есть каталог, в него навалена куча deb-пакетов различных версий, например, foo 0.40, foo 0.41, foo 0.41 backported. Пакетов для простоты - 1000 штук по 3-4 версии каждого.
Из них в каталоге нужно оставить только "актуальные" пакеты (вроде foo 0.41).

dpkg-scanpackages, грубо говоря, выдаёт список "актуальных" пакетов. Задача сводится к тому, чтобы из начального списка вычленить неактуальные, используя шелл.

Последний раз редактировалось rmn; 29.05.2007 в 18:56.
rmn вне форума   Ответить с цитированием Вверх
Старый 29.05.2007, 20:04      #8
greiv
Новичок
 
Аватар для greiv
По умолчанию

rmn, ну цель-то понятна=), раз dpkg-scanpackages такой хороший, что выплевывает список "актуальных" пакетов, то зачем нужна свистопляска с отдельными директориями и перемещениями по тысячу раз... как будто неактуальные нельзя замочиь в том же каталоге

Последний раз редактировалось greiv; 29.05.2007 в 20:08. Причина: неграмотный
greiv вне форума   Ответить с цитированием Вверх
Старый 29.05.2007, 21:13      #9
rmn
Местный
По умолчанию

greiv, мне не совсем понятно, что ты предлагаешь. Шелл-сценарий для решения задачи в студию.
rmn вне форума   Ответить с цитированием Вверх
Старый 29.05.2007, 21:20      #10
tmp0000
Пользователь
Пользователь Mozilla Firefox
 
Аватар для tmp0000
По умолчанию

Цитата:
Код:
diff {old,new}.list | grep '^< ' | sed 's/^< //' | xargs rm -f
так лучше ?
Вроде да, я это пытался сделать, но как-то "ниасилил"..
__________________
Думай головой, %username%.
tmp0000 вне форума   Ответить с цитированием Вверх
Старый 29.05.2007, 21:31      #11
Frosty
Местный
Пользователь Mozilla Firefox
 
Аватар для Frosty
По умолчанию

Сообщение от rmn Посмотреть сообщение
Код:
dpkg-scanpackages . /dev/null > Packages 2>/dev/null
ls -1 *.deb | sort > old.list
awk '/^Filename: / {print $2}' Packages | sort > new.list
diff {old,new}.list | grep '^< ' | sed 's/^< //' | xargs rm -f
rm -f {old,new}.list
так лучше ?
Нипаешт закоим то создает новый Packzges.gz а пакетов старых не потирает
Frosty вне форума Пол: Мужчина   Ответить с цитированием Вверх
Старый 29.05.2007, 21:34      #12
rmn
Местный
По умолчанию

Frosty, опять напилсо. попробуй его с утра запустить. :]
rmn вне форума   Ответить с цитированием Вверх
Старый 29.05.2007, 21:34      #13
tmp0000
Пользователь
Пользователь Mozilla Firefox
 
Аватар для tmp0000
По умолчанию

Сообщение от rmn Посмотреть сообщение
Frosty, опять напилсо. попробуй его с утра запустить. :]
+1!!!
__________________
Думай головой, %username%.
tmp0000 вне форума   Ответить с цитированием Вверх
Старый 29.05.2007, 21:59      #14
Frosty
Местный
Пользователь Mozilla Firefox
 
Аватар для Frosty
По умолчанию

Сообщение от rmn Посмотреть сообщение
Frosty, опять напилсо. попробуй его с утра запустить. :]
Дануна, я закинул скриптв папку с архивами, запустил, он нахреначил мне новый Packages.gz, о чем и написал в консоли с подробным выводом списка пакетов, которые он включил, а файл gstreamer0.10-plugins-ugly_0.10.4-0ubuntu2_i386, лежащий рядом с gstreamer0.10-plugins-ugly_0.10.5-0ubuntu2_i386 не похерил...
Frosty вне форума Пол: Мужчина   Ответить с цитированием Вверх
Старый 30.05.2007, 13:04      #15
rmn
Местный
По умолчанию

Frosty, дык .gz надо развернуть предварительно. Либо прямо в скрипте изменить строку так:
Код:
zcat Packages.gz | awk '/^Filename: / {print $2}' | sort > new.list


Добавлено через 14 часов 31 минуту
Frosty, все-таки решил проверить на себе код чтобы 100% работало без собственноручных доводок, нужно подправить строку
Код:
ls -1 ./*.deb | sort > old.list

Последний раз редактировалось rmn; 30.05.2007 в 13:04. Причина: Добавлено сообщение
rmn вне форума   Ответить с цитированием Вверх
Старый 30.05.2007, 14:25      #16
Frosty
Местный
Пользователь Mozilla Firefox
 
Аватар для Frosty
По умолчанию

полностью от начала и до конца выложи скрипт, а то опять тренироваца не хочется
Frosty вне форума Пол: Мужчина   Ответить с цитированием Вверх
Старый 30.05.2007, 15:55      #17
tmp0000
Пользователь
Пользователь Mozilla Firefox
 
Аватар для tmp0000
По умолчанию

Цитата:
полностью от начала и до конца выложи скрипт, а то опять тренироваца не хочется
Да, я тоже себе кое-что убил
__________________
Думай головой, %username%.
tmp0000 вне форума   Ответить с цитированием Вверх
Старый 30.05.2007, 16:04      #18
rmn
Местный
По умолчанию

код
должно работать но проверять сейчас времени нет.
rmn вне форума   Ответить с цитированием Вверх
Старый 30.05.2007, 21:12      #19
Frosty
Местный
Пользователь Mozilla Firefox
 
Аватар для Frosty
По умолчанию

Сообщение от rmn Посмотреть сообщение
код
должно работать но проверять сейчас времени нет.
Опять мимо

Код:
frosty@frosty-desktop:~/Desktop/неозаглавленная папка$ sudo sh "/home/frosty/Desktop/неозаглавленная папка/clean"
diff: пропущен операнд после `{old,new}.list'
diff: Попробуйте `diff --help' для получения более подробного описания.
Но пакеты хотя бы разграничивает:
Цитата: old.list
./gstreamer0.10-plugins-ugly_0.10.4-5_i386.deb
./gstreamer0.10-plugins-ugly_0.10.5-0ubuntu2_i386.
Цитата: new.list
./gstreamer0.10-plugins-ugly_0.10.5-0ubuntu2_i386.
Frosty вне форума Пол: Мужчина   Ответить с цитированием Вверх
Старый 30.05.2007, 21:33      #20
rmn
Местный
По умолчанию

Frosty, скрипт написан на bash, а ты его запускаешь через sh. RTFM
rmn вне форума   Ответить с цитированием Вверх
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу фильм Vadim Поиск 2372 04.01.2018 17:08
Загадка ZyDeHb На завалинке 1277 22.02.2013 17:37
Ударная сила Exciter Документальные 5 06.05.2012 20:39
Star Wars: The Force Unleashed Inki Игровые приставки 28 13.12.2008 13:47
Волшебная сила искусства (1970) kellan Хорошее, забытое, старое... 0 06.03.2008 23:54


Обратная связь
Текущее время: 10:25. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot