|  29.05.2007, 01:06 | #1 | 
| Пользователь |  Сила 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%. | 
|   |     | 
|  29.05.2007, 16:46 | #3 | 
| Местный |   Код: #!/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. | 
|   |     | 
| Благодарности: 2 | 
|  29.05.2007, 17:36 | #4 | ||||||||||||
| Новичок |     
 | ||||||||||||
|   |     | ||||||||||||
|  29.05.2007, 17:41 | #5 | 
| Местный |   
			
			greiv, если бы он мог это сделать, то не заморачивался бы с написанием скриптов.   Вообще, чтобы "вкурить" что он хочет автоматизировать, надо примерно знать как устроены и создаются репозитории debian/ubuntu и как там нумеруются версии пакетов. Последний раз редактировалось rmn; 29.05.2007 в 17:43. | 
|   |     | 
|  29.05.2007, 18:44 | #7 | 
| Местный |   
			
			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. | 
|   |     | 
|  29.05.2007, 20:04 | #8 | 
| Новичок |   
			
			rmn, ну цель-то понятна=), раз  dpkg-scanpackages такой хороший, что  выплевывает список "актуальных" пакетов, то зачем нужна свистопляска с отдельными директориями и перемещениями по тысячу раз... как будто неактуальные нельзя замочиь в том же каталоге
		 Последний раз редактировалось greiv; 29.05.2007 в 20:08. Причина: неграмотный | 
|   |     | 
|  29.05.2007, 21:31 | #11 | ||||||||||||
| Местный |     
  закоим то создает новый Packzges.gz а пакетов старых не потирает   | ||||||||||||
|     |     | ||||||||||||
|  29.05.2007, 21:59 | #14 | 
| Местный |   
			
			
Дануна, я закинул скриптв папку с архивами, запустил, он нахреначил мне новый Packages.gz, о чем и написал в консоли с подробным выводом списка пакетов, которые он включил, а файл gstreamer0.10-plugins-ugly_0.10.4-0ubuntu2_i386, лежащий рядом с gstreamer0.10-plugins-ugly_0.10.5-0ubuntu2_i386 не похерил...
		 | 
|     |     | 
|  30.05.2007, 13:04 | #15 | 
| Местный |   
			
			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. Причина: Добавлено сообщение | 
|   |     | 
|  30.05.2007, 21:12 | #19 | ||||||||||||||||||||||||||||||||||||
| Местный |     
  Код: frosty@frosty-desktop:~/Desktop/неозаглавленная папка$ sudo sh "/home/frosty/Desktop/неозаглавленная папка/clean"
diff: пропущен операнд после `{old,new}.list'
diff: Попробуйте `diff --help' для получения более подробного описания.  
   
 | ||||||||||||||||||||||||||||||||||||
|     |     | ||||||||||||||||||||||||||||||||||||
|  | 
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
| 
 | 
 | 
|  Похожие темы | ||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение | 
| Ищу фильм | 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 |