Можно использовать 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]
Необходимо передать литеральный Escape scp
избегать удаленной обработки машины *
как шарик (замечают, что он вдвойне заключается в кавычки):
scp 'SERVERNAME:/DIR/\*' .
Я нашел совет Patrick быть корректным, хотя ответ Chris получил меня на правильном пути. Используйте кавычки, и затем Вам не нужна обратная косая черта перед звездочкой.
scp 'SERVERNAME:/tmp/file_num\*' .
scp:/tmp/file_num*.csv: Никакой такой файл или каталог
scp 'SERVERNAME:/tmp/file_num*' .
judgments_for_job_171642.csv 100% 32 КБ 32.0KB/s 0:00
judgments_for_job_172394.csv 100% 548 КБ 182.6KB/s 0:03
*
), не, о как к шарику на удаленном только.
– Chris Down
08.12.2013, 22:57
ПРИМЕЧАНИЕ.:Предлагаемое ниже решение проверено и работает правильно.
Одинарныекавычки прервут раскрытие переменной, если вы использовали псевдоним для части пути, который вы подставляете.
Вот сценарий, который использует ДВОЙНЫЕ кавычки для использования -случая имени файла с подстановкойкоманда -configure_.tar.gz*с использованием пути с псевдонимом переменная:
#!/bin/bash
USEREXECUTINGSCRIPT='admin'
SCRIPTSDIR="myscripts"
SCPUSER='terrencehoulahan'
SCPUSERPASSWD='Change-Me'
SCPHOST='1.2.3.4'
SCPDIRECTORYREMOTE='/Users/terrencehoulahan/Downloads/Ubuntu/18.04'
## Uncomment appropriate below command for your distro to install "sshpass"
#apt-get -y sshpass
#yum -y install sshpass
sshpass -p "$SCPUSERPASSWD" scp -o StrictHostKeyChecking=no $SCPUSER@$SCPHOST:"$SCPDIRECTORYREMOTE/command-configure_*.tar.gz" $(getent passwd|grep ^$(echo $USEREXECUTINGSCRIPT)|cut -d ':' -f6)/$SCRIPTSDIR/
После закрывающей двойной кавычки целевой локальный каталог создается путем простого извлечения домашнего каталога указанного пользователя из/etc/passwd.
Сама команда scp начинается с sshpass
и -o StrictHostKeyChecking=no
, чтобы полностью автоматизировать команду scp
без вмешательства пользователя. Выглядит запутанным, но лучше, чем жесткие -пути кодирования, которые, как ожидается, будут время от времени меняться.
Anyhoo, пример использования двойных кавычек, где переменные в пути, который вы подставляете, должны быть разрешены для расширения. ХТХ
В подобных случаях просто используйте -r
. Особенно, если вы используете переменные в своем скрипте.
Пример:
SERVERNAME="root@example.com"
scp -r $SERVERNAME:/DIR/./
touch /tmp/abcd.1234; scp 'localhost:/tmp/abcd.\*' ./
:scp: /tmp/abcd.*: No such file or directory
– Patrick 07.12.2013, 03:00pscp
на стороне клиента для разрешения удаленного globbing. – Patrick 09.12.2013, 00:08