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

Я пытаюсь скопировать все файлы, которые не начинаются с буквы «a», в ksh.

Копирование с исходного компьютера на конечный компьютер работает нормально :

scp -p !(a*) user@machine:/path/directory/.

Но, если я нахожусь на целевом сервере и хочу скопировать с исходного сервера, он не работает:

scp -p user@machine:/path/!(a*) .

Есть идеи?

4 Solutions collect form web for “Как scp с регулярными выражениями”

Я согласен с фонбрендом. Таким образом, scp user@machine:/path/* будет расширяться / path / * к файлам в LOCAL / path / *, а не на удаленном компьютере.

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

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

и … это сработало. Попробуй это. Обратите внимание на цитаты. Очень необходимо. Дайте нам знать.

Примечание. Учетная запись пользователя на удаленном компьютере может по умолчанию использовать другую программу оболочки, чем ваша , поэтому правила расширения wild-карты могут быть разными, поэтому «используйте это.

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

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

Я обнаружил, что на старых машинах 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 

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

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

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

 mkdir ~/net/machine sshfs user@machine:/ ~/net/machine cp -p ~/net/machine/path/!(a*) . 
  • настройка scp и umask
  • указать оболочку для сеанса ssh
  • Копирование файла с использованием scp в несуществующий локальный каталог - вводящее в заблуждение сообщение об ошибке
  • Почему SCP не работает, когда включена опция «RequestTTY force»?
  • Переместить файл в домашний каталог другого пользователя (без sudo)?
  • Как копировать, выполнять и извлекать данные с удаленного компьютера?
  • Команда scp не выполняет команду cp
  • Исключить символы для SCP-файла
  • не удалось использовать scoply для операции scp
  • При входе в систему на удаленном компьютере нельзя удалять файл с удаленного компьютера на локальный хост
  • Передача больших (8 ГБ) файлов по ssh
  • Interesting Posts

    Как я могу сгладить два шаблона из одного файла и направить строки на разные выходные файлы в зависимости от того, какая совпадение соответствует?

    Как правильно настроить разрешения сервера SVN?

    синтаксическая ошибка возле неожиданного токена `('

    Конкретная замена уровня столбца

    Как запустить serverpeak server при перезагрузке в качестве конкретного пользователя

    Несколько похожих записей в конфигурации ssh

    zsh: как получить расширение файла, работающее в заявлении на печать

    Использует ли ksh88 число как десятичное с использованием синтаксиса 10 # n?

    Автоматически обновлять билеты на kerberos на экране GNU

    Как сбросить пароль на зашифрованном fs?

    autossh в / etc / inittab

    Как работает fontconfig?

    Разрешение исполняемого файла Unix и разрешения пользователя во время выполнения

    Почему Apple защищает авторские права на страницах lpadmin, lpq и lpstat?

    OpenCL не обнаруживает графическую карту AMD как устройство

    Linux и Unix - лучшая ОС в мире.