На хинду, как я нахожу список пакетов установленным после некоторой определенной даты?

Используйте Awk или режим абзаца Perl для обработки абзаца файла абзацем, где абзацы разделяются пустыми строками.

awk -vRS= '
  NR!=1 {print ""}      # print blank line before every record but the first
  {                     # do this for every record (i.e. paragraph):
    gsub(" *\n *"," "); # replace newlines by spaces, compressing spaces
    sub(" *$","");      # remove spaces at the end of the paragraph
    print
  }
'
perl -000 -pe '             # for every paragraph:
  print "\n" unless $.==1;  # print a blank line, except before the first paragraph
  s/ *\n *(?!$)/ /g;        # replace newlines by spaces, compressing spaces, but not at the end of the paragraph
  s/ *\n+\z/\n/             # normalize the last line end of the paragraph
'

Конечно, так как это не анализирует (La) TEX, он ужасно искалечит комментарии, дословные среды и другой специальный синтаксис. Можно хотеть изучить DeTeX или другие преобразователи (La)TeX-to-text.

7
15.08.2012, 03:01
1 ответ

Можно использовать app-portage/genlop для этого.

genlop -l --date some_date

перечислит все пакеты, объединенные на или после той даты. (Можно также указать дату окончания.)

Получить список пакетов, подходящих для emerge --unmerge, попробуйте что-то как:

genlop -ln --date 2011/10/02 | perl -ne '/>>> (.*)/ and print " =$1";'

Действительно перепроверьте тот список, прежде чем на самом деле неслияние, удаление системных пакетов случайно не будет забавой.

Другой способ получить список вещей, объединенных после данной даты, смотрит на BUILD_TIME сохраненный в базе данных перевозки.

#!/bin/bash
stime=$(date -d "$1" +%s)

for dir in /var/db/pkg/*/* ; do
    if [ -f $dir/BUILD_TIME ] ; then
        btime=$(<$dir/BUILD_TIME)
        if [ $btime -ge $stime ] ; then
            package=$(basename $dir)
            category=$(basename $(dirname $dir))
            echo $category/$package
        fi
    fi
done

Назовите это с датой (т.е. ./script "2001/09/30 21:32") и Вы получите список пакетов, объединенных с тех пор.

Перевозка не хранит, было ли слияние новой установкой или обновлением в его базе данных. Вы могли восстановить ту информацию от emerge.log файл, принимающий Вас, имеет историю всей Вашей системы там.

Более простой способ обработать все это состоял бы в том, чтобы использовать наборы пакета. Создайте набор каждый раз, когда Вы испытываете новый рецепт и использование что сделать Ваши очистки. (Depclean все еще необходим.)

# echo dev-perl/IO-AIO > /etc/portage/sets/my_set
# emerge -a @my_set

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N     ] dev-perl/IO-AIO-2.33 

Would you like to merge these packages? [Yes/No] y
>>> Recording @my_set in "world" favorites file...

...
>>> Installing (1 of 1) dev-perl/IO-AIO-2.33
>>> Auto-cleaning packages...

>>> No outdated packages were found on your system.

 * GNU info directory index is up-to-date.
# emerge -a --unmerge @my_set
 * This action can remove important packages! In order to be safer, use
 * `emerge -pv --depclean <atom>` to check for reverse dependencies before
 * removing packages.

>>> These are the packages that would be unmerged:

 dev-perl/IO-AIO
    selected: 2.33 
   protected: none 
     omitted: none 

All selected packages: dev-perl/IO-AIO-2.33

>>> 'Selected' packages are slated for removal.
>>> 'Protected' and 'omitted' packages will not be removed.

Would you like to unmerge these packages? [Yes/No] 
11
27.01.2020, 20:16
  • 1
    Спасибо за предложение я попробовал его. К сожалению, genlop полагается на парсинг файлов журнала перевозки и не отражает состояние существующей системы, таким образом, его вывод уже включает удаленные пакеты, и некоторые пакеты включены многократно, поскольку они были установлены многократно и существуют также некоторые пакеты, включенные, который, оказалось, был обновлен одновременно период. Так, в конце концов, я все еще должен проверить все пакеты один за другим, чего я стараюсь избегать. –  AlexD 02.10.2011, 12:26
  • 2
    Добавленный больше информации и лучший способ обработать Ваш сценарий. HTH. –  Mat 02.10.2011, 13:06
  • 3
    Спасибо, прямой доступ к /var/pkg/db намного лучше. Я изменил Ваш сценарий для использования equery depends пропускать пакеты, которые имеют что-либо, зависело от них так, я мог получить список пакетов, который безопасно удалить, не повреждая другие пакеты. Наборы являются интересной функцией, но она не могла решить вариант использования, когда пакет, включенный в набор, также используется некоторым другим пакетом, который не включен в набор, так удаление набора повредило бы этот другой пакет. –  AlexD 07.10.2011, 10:08
  • 4
    При неслиянии набора перевозка не удаляет пакетов, если они конкретно не перечислены в наборе. Обычно пакеты, которые поместить в набор, не зависят других пакетов в том же наборе. Например, www-clients/firefox получения по запросу в наборе зависимостей, но очень немного пакетов зависят от него. Если www-clients/firefox и media-libs/mesa находятся в том же наборе, Вы могли просто идти вперед и удалить media-libs/mesa. Когда Вы не объединяетесь, мезаструктура набора не удалить. Только, когда Вы работаете emerge --depclean это удалить и только если никакому другому миру или пакетам набора не нужен он. –  hololeap 16.09.2014, 22:55
  • 5
    В то время как Вы продолжаете использовать хинду, Вы изучите, когда использовать --oneshot флаг, чтобы не помещать пакеты в "мировой" набор (эффективно подразумевать, что они будут удалены в следующий раз, Вы работаете emerge --depclean), когда использовать пользовательские наборы, и когда записать Ваш собственный ebuilds для неофициального программного обеспечения (так, чтобы можно было постоянно установить любые зависимости библиотеки, не добавляя их к "мировому" набору). –  hololeap 16.09.2014, 22:59

Теги

Похожие вопросы