Как использовать подстановочные знаки (*) при копировании с scp?

Можно использовать 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] 
150
03.02.2018, 17:39
4 ответа

Необходимо передать литеральный Escape scp избегать удаленной обработки машины * как шарик (замечают, что он вдвойне заключается в кавычки):

scp 'SERVERNAME:/DIR/\*' .
130
27.01.2020, 19:28
  • 1
    , Вам или нужны кавычки или обратная косая черта перед звездой, не обоими. И scp не является тем, расширяющим его, оболочка. –  Patrick 23.12.2011, 06:39
  • 2
    Вы попробовали его? Я просто сделал, работы точно, как я описал (заключение в кавычки и выход из отказа причин). User1274964 даже подтверждает поведение в его ответе. touch /tmp/abcd.1234; scp 'localhost:/tmp/abcd.\*' ./: scp: /tmp/abcd.*: No such file or directory –  Patrick 07.12.2013, 03:00
  • 3
    @Patrick, который вопрос об использовании литеральной звездочки, т.е., избегая globbing в целом, не о как к шарику на удаленном. –  Chris Down 08.12.2013, 22:57
  • 4
    На самом деле вопрос о получении pscp на стороне клиента для разрешения удаленного globbing. –  Patrick 09.12.2013, 00:08

Я нашел совет 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

58
27.01.2020, 19:28
  • 1
    Право, потому что это означает, что Вы хотите к шарику на удаленном. Вопрос о том, как остановить globbing на удаленном (для получения литерала *), не, о как к шарику на удаленном только. –  Chris Down 08.12.2013, 22:57
  • 2
    @ChrisDown. Нет. Пользователь хочет подстановочный знак, на котором не подробно останавливаются хост, и действительно хочет его, подробно остановился на удаленном, чтобы позволить этому соответствовать нескольким файлам там. Ни один из возвращенных файлов не имеет литерал '*' в них. Вы имели в виду "остановку globbing на хосте"? –  Tim Bird 07.09.2016, 22:38

ПРИМЕЧАНИЕ.:Предлагаемое ниже решение проверено и работает правильно.

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

Вот сценарий, который использует ДВОЙНЫЕ кавычки для использования -случая имени файла с подстановкойкоманда -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, пример использования двойных кавычек, где переменные в пути, который вы подставляете, должны быть разрешены для расширения. ХТХ

1
27.01.2020, 19:28

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

Пример:

SERVERNAME="root@example.com"

scp -r $SERVERNAME:/DIR/./
0
19.08.2020, 11:01

Теги

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