Только для полноты этого списка, sed
может также сделать это:
sed '=' questions | sed 'N;s/\n/. /'
Печально =
управляйте печатает номера строки на отдельной строке, поэтому только разделенный sed
вызов может украсить форматирование.
Я соглашаюсь с vonbrand. Globing обрабатывается оболочкой, в которой Вы работаете. Так scp user@machine:/path/*
развернет путь / /* в файлы в ЛОКАЛЬНОМ пути / /*, не на удаленной машине.
Однако только для усмешек я попробовал:
scp "user@machine:/path/[regex here]" .
и.... это работало. Попробуйте это. Отметьте кавычки. Очень необходимый.Сообщите нам.
Примечание: учетная запись пользователя на удаленной машине может принять значение по умолчанию к другой программной оболочке, чем Ваш, таким образом, правила подстановочного расширения могут отличаться, таким образом, 'изделие это.
Это не "scp с регулярными выражениями", тот, обрабатывающий шарики файла, является оболочкой. scp
просто вручен уже расширенный список файлов. И расширение происходит на машине, куда команда выполняется.
Извините, не может (легко) сделать.
Удаленные имена передали 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*) .
То, что я обнаружил, что на старых машинах 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