Как к scp с регулярными выражениями

Только для полноты этого списка, sed может также сделать это:

sed '=' questions | sed 'N;s/\n/. /'

Печально = управляйте печатает номера строки на отдельной строке, поэтому только разделенный sed вызов может украсить форматирование.

12
06.03.2013, 18:18
4 ответа

Я соглашаюсь с vonbrand. Globing обрабатывается оболочкой, в которой Вы работаете. Так scp user@machine:/path/* развернет путь / /* в файлы в ЛОКАЛЬНОМ пути / /*, не на удаленной машине.

Однако только для усмешек я попробовал:

scp "user@machine:/path/[regex here]" .  

и.... это работало. Попробуйте это. Отметьте кавычки. Очень необходимый.Сообщите нам.

Примечание: учетная запись пользователя на удаленной машине может принять значение по умолчанию к другой программной оболочке, чем Ваш, таким образом, правила подстановочного расширения могут отличаться, таким образом, 'изделие это.

15
27.01.2020, 19:55

Это не "scp с регулярными выражениями", тот, обрабатывающий шарики файла, является оболочкой. scp просто вручен уже расширенный список файлов. И расширение происходит на машине, куда команда выполняется.

Извините, не может (легко) сделать.

1
27.01.2020, 19:55
  • 1
    Этот ответ является неправильным. Удалите огромное спасибо :) –  Michael 20.01.2017, 22:33

Удаленные имена передали scp на самом деле интерпретируются как разделенный от пробела список шаблонов на удаленной стороне. Это - часто раздражение, когда Вы пытаетесь скопировать файл, имя которого содержит пробелы, но здесь это полезно: scp -p 'user@machine:/path/a*' . скопировал бы все файлы, имя которых начинается a.

Ваша команда будет работать при заключении в кавычки шаблона так, чтобы это было интерпретировано удаленно, а не локально, если Вы передаете другое препятствие. Шаблон !(a*) не основной шаблон оболочки, это - ksh расширение (что удар и zsh также поддерживают при установке подходящего варианта). Таким образом, это будет только работать, если Ваша удаленная оболочка будет ksh, не, если это - некоторая другая оболочка и Вы exec ksh от .profile или что-то подобное.

Простой способ, если Вы не находитесь в некоторой ограниченной или старинной среде, состоит в том, чтобы забыть о scp. Вы хотели бы, чтобы удаленные файлы работали точно так же, как локальные файлы, поэтому сделайте их локальными файлами: смонтируйте удаленный каталог с sshfs. Это требует FUSE на локальной машине и сервере SFTP (т.е. sftp-server исполняемый файл это sshd запуски) на удаленной машине.

mkdir ~/net/machine
sshfs user@machine:/ ~/net/machine
cp -p ~/net/machine/path/!(a*) .
0
27.01.2020, 19:55

То, что я обнаружил, что на старых машинах HP-UX (Parisc 11.11), я должен был использовать [^ a] * Но на новых машинах (Parisc 11,31 и новее) это работает с! (A *)

Это то, с чем я оказался. И это работает:

    if [[  ${S_MACH} = "phd026a" || ${S_MACH} = "tht030a" ]]
    then
            scp -p -r ${S_MACH}:${S_DIR}/bin/[^a^b^c^p]* ${D_DIR}/bin/.
    else
            scp -p -r ${S_MACH}:${S_DIR}/bin/!((a*)|(b*)|(c*)|(p*)) ${D_DIR}/bin/.
    fi
1
27.01.2020, 19:55

Теги

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