Можно объединить критерии с -o
как предложено Shadur. Отметьте это -o
имеет более низкий приоритет, чем сопоставление, таким образом, Вам, возможно, понадобятся круглые скобки.
find . -name '*.jpg' -o -name '*.png'
find . -mtime -7 \( '*.jpg' -o -name '*.png' \) # all .jpg or .png images modified in the past week
На Linux можно использовать -regex
объединить расширения более кратким способом. Значением по умолчанию regexp синтаксис является Emacs (основной regexps плюс несколько расширений такой как \|
для чередования); существует опция переключиться на расширенный regexps.
find -regex '.*\.\(jpg\|png\)'
find -regextype posix-extended -regex '.*\.(jpg|png)'
На FreeBSD, NetBSD и OSX, можно использовать -regex
объединенный с -E
для расширенного regexps.
find -E . -regex '.*\.(jpg|png)'
aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \
| cut -f1 | sort -u > defaultinstalled.txt
comm -23 currentlyinstalled.txt defaultinstalled.txt
Один способ думать об этой проблеме состоит в том, чтобы повредить это в три части:
Следующая команда, кажется, работает над моей системой:
$ aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
Аналогичные подходы могут быть найдены в ссылках, которые Gilles отправил как комментарий на вопрос. Некоторые источники утверждают, что это будет только работать при использовании способности для установки пакетов; однако, я почти никогда не использую способность для установки пакетов и нашел, что это все еще работало. --disable-columns
препятствует тому, чтобы способность дополнила строки имен пакета с пробелами, которые препятствовали бы сравнению ниже. | sort -u
сортирует файл и удаляет дубликаты. Это делает заключительный шаг намного легче.
Примечание: Этот раздел начинается с 'неправильным путем', что я думаю, иллюстративно. Вторая часть кода является той, которая работает.
Это немного более хитро. Я первоначально думал, что хорошее приближение будет всеми пакетами, которые являются зависимостями метапакетов, минимальных человечностью, стандартных человечностью, настольных человечностью, и различный Linux связанные с ядром пакеты. Несколько результатов на поисках Google, казалось, использовали этот подход. Для получения списка этих зависимостей я сначала попробовал следующее (который не работал):
$ apt-cache depends ubuntu-desktop ubuntu-minimal ubuntu-standard linux-* | awk '/Depends:/ {print $2}' | sort -u
Это, кажется, не учитывает некоторые пакеты, которые я знаю, должен был прибыть по умолчанию. Я все еще полагаю, что этот метод должен работать, если Вы создаете правильный список метапакетов.
Однако кажется, что зеркала Ubuntu содержат "явный" файл, который содержит все пакеты в установке по умолчанию. Декларация для Ubuntu 12.04.3 здесь:
http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest
Если Вы перерываете эту страницу (или страницу зеркала ближе Вам):
http://mirror.pnl.gov/releases/precise/
Необходимо смочь найти ".manifest" файл, который соответствует версии и архитектуре, которую Вы используете. Извлечь просто пакет называет, я сделал это:
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f1 | sort -u > defaultinstalled.txt
Список был, вероятно, уже отсортирован и уникален, но я хотел быть уверенным, что он был правильно отсортирован для создания следующего шага легче. Я затем вставил вывод defaultinstalled.txt
.
Это - самая легкая часть, так как большинство подобных Unix систем имеет много инструментов, чтобы сделать это. comm
инструмент является одним из многих способов сделать это:
comm -23 currentlyinstalled.txt defaultinstalled.txt
Это должно распечатать список строк, которые уникальны для первого файла. Таким образом это должно распечатать список установленных пакетов не в установке по умолчанию.
Вот некоторый демонстрационный вывод cat /var/log/apt/history.log
:
Start-Date: 2011-01-22 00:43:38
Commandline: apt-get --target-release experimental install libdbus-1-dev
Upgrade: libdbus-1-3:i386 (1.4.0-1, 1.4.1-1), libdbus-1-dev:i386 (1.4.0-1, 1.4.1-1)
End-Date: 2011-01-22 00:43:48
Start-Date: 2011-01-23 01:16:13
Commandline: apt-get --auto-remove purge webcheck
Purge: python-utidylib:i386 (0.2-6), python-beautifulsoup:i386 (3.1.0.1-2), libtidy-0.99-0:i386 (20091223cvs-1), webcheck:i386 (1.10.3)
End-Date: 2011-01-23 01:16:31
Что касается Вашего вопроса, отфильтруйте материал с grep (cat /var/log/apt/history.log | grep Commandline
).
Обратите внимание, что эти файлы повернуты, таким образом проверьте на других, таким образом, Вы ничего не пропускаете:
$ ls /var/log/apt/history.log*
-rw-r--r-- 1 root root 69120 2011-01-23 18:58 /var/log/apt/history.log
-rw-r--r-- 1 root root 19594 2011-01-01 02:48 /var/log/apt/history.log.1.gz
Примечание:
Commandline
, так grep
прием не будет работать с ними.aptitude
и другие диспетчеры пакетов. Если Ваши журналы вращались далеко, хорошо затем Вам не повезло. Обновленный
– Steven D
24.01.2011, 00:27
Вы хотели бы взглянуть на эту статью.
В конце статьи существует сценарий Python, который должен сделать то, что Вы хотите.
Это было записано для (k) человечности. но должен работать на Ubuntu также.
Согласно man apt-mark
:
apt-mark showauto
apt-mark showmanual
showmanual
показывает вещи как xserver-xorg-video-vesa
, который я клянусь, что не устанавливал вручную.
– phunehehe
22.09.2012, 06:18
Я столкнулся с этой красивой остротой, в то время как я искал этот запрос
Один лайнер
comm -13 \
<(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
<(comm -23 \
<(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
<(apt-mark showauto | sort) \
)`
Эта острота фильтрует пакеты, установленные системой с помощью журналов от /var/log/installer/initial-status.gz
Я отправлю ссылку на исходный поток, когда я нашел его, поскольку эта острота не является моей и и я, может казаться, не помню, где я видел его.
Ниже дополнение к ответу D Steven.
Следующая строка, кажется, усекает имена пакета в 32 символах:
aptitude search '~i !~M' | cut -d" " -f4 | sort -u > currentlyinstalled.txt
Это, кажется, работает:
aptitude search '~i !~M' -F "%p" > sort -u > currentlyinstalled.txt
см. этот ответ
Вы можете использовать любой из этих двух однострочников. Оба дают одинаковый результат на моей машине и являются более точными, чем все решения, предложенные до сих пор (июль 2014 г.) в этом вопросе. Они представляют собой комбинацию двух ответов (1) и (2) . Обратите внимание, что я изначально разместил этот ответ здесь .
Использование apt-mark
:
comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Использование aptitude
:
comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Очень немногие пакеты все еще не могут пройти через трещины, хотя я подозреваю, что эти на самом деле установлен пользователем, либо сразу после установки через настройку языковой локализации, либо, например, через установщик кодеков Totem. Кроме того, похоже, что версии заголовков linux также накапливаются, хотя я установил только метапакет, не зависящий от версии. Примеры:
libreoffice-help-en-gb
openoffice.org-hyphenation
gstreamer0.10-fluendo-mp3
linux-headers-3.13.0-29
Как это работает
sed
удаляет оставшиеся пробелы в конце строки. Другие возможности также не работают:
ubuntu-14.04-desktop-amd64. файл manifest
( здесь для Ubuntu 14.04) вместо /var/log/installer/initial-status.gz
. Другие пакеты отображаются как установленные вручную, хотя это не так. apt-mark showauto
вместо /var/log/installer/initial-status.gz
. apt-mark
, например, не включает пакет xserver-xorg, в то время как другой файл включает. Оба перечисляют больше пакетов, чем указанное выше решение.
¡Muchas gracias y felicitaciones a los que se les ocurrió esa joya de guión!
Quería agregar mis 2¢ y agregué la fecha de instalación que deduzco de $info.
No dominé los detalles de por qué los archivos $info se actualizan o no y cuándo, pero funciona en la práctica.
Mi secuencia de comandos enumera las actualizaciones más recientes de los paquetes que no son de dependencia agregados después de la instalación.
Dándole una verificación periódica, estaba viendo lo que habría registrado manualmente sin una sola falla.
Es decir, lotes de paquetes instalados por el mismo motivo. Desafortunadamente, las actualizaciones rompen ese orden.
Después de una actualización del sistema, tenía una lista de mis paquetes agregados que la actualización no actualizó, seguidos de los que sí.
¡Limpio! Disfrutar.
info='/var/lib/dpkg/info/'
comm -13 > /tmp/packages \
<(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
<(comm -23 \
<(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
<(apt-mark showauto | sort) \
)
while read n; do
echo $(ls -ltr --time-style=long-iso $info$n.* $info$n:i386.* $info$n:amd64.* 2>/dev/null \
| tail -n 1 | perl -pe 's/.*([0-9]{4}?-.*:[0-9]{2}?).*/\1/') $n
done < /tmp/packages | sort
Вы также можете посмотреть файл /var/lib/apt/extended_states
.
cat /var/lib/apt/extended_states | grep -B2 'Auto-Installed: 0'
Это полезно, если вы хотите узнать, что было установлено на старом разделе.
aptitude search '~i!~M' -F %p
не? – ephemient 30.10.2010, 07:57http://releases.ubuntu.com/releases/trusty/ubuntu-14.04-desktop-amd64.manifest
и дополнительное| sed "s/ *$//"
но все еще провал. – jmiserez 06.07.2014, 17:14apt-mark showmanual | sort -u
, как показано в других ответах. Более простой, и не полагаетсяaptitude
который не установлен по умолчанию. – skagedal 03.05.2015, 09:44