Я пытаюсь скопировать все файлы, которые не начинаются с буквы «а», в ksh.
Копирование с исходного компьютера на целевой компьютер работает нормально :
scp -p !(a*) user@machine:/path/directory/.
Но, если я на целевом сервере и хочу скопировать с исходного сервера, происходит сбой:
scp -p user@machine:/path/!(a*) .
Есть идеи?
Я обнаружил, что на старых машинах HP-UX (parisc 11.11) мне приходилось использовать [^ a] * Но на более новых машинах (parisc 11.31 и новее) он работает с! (A *)
Это то, что я закончил. И это работает:
источник
Переданные удаленные имена
scp
фактически интерпретируются как разделенный пробелами список шаблонов на удаленной стороне. Это часто раздражает, когда вы пытаетесь скопировать файл, имя которого содержит пробелы, но здесь это полезно:scp -p 'user@machine:/path/a*' .
скопирует все файлы, имя которых начинается сa
.Ваша команда будет работать, если вы процитируете шаблон так, чтобы он интерпретировался удаленно, а не локально, при условии, что вы преодолеете другое препятствие. Шаблон
!(a*)
не является базовым шаблоном оболочки, это расширение ksh (это bash и zsh также поддерживают, если вы установите соответствующую опцию). Так что это будет работать только в том случае, если ваша удаленная оболочка - ksh, а не если это какая-то другая оболочка и выexec ksh
из нее.profile
или что-то подобное.Самый простой способ, если вы не находитесь в какой-то ограниченной или античной среде, - это забыть
scp
. Вы бы хотели, чтобы удаленные файлы работали так же, как локальные файлы, поэтому сделайте их локальными: подключите удаленный каталог с помощью sshfs . Для этого требуется FUSE на локальном компьютере и SFTP-сервер (то естьsftp-server
исполняемый файл, которыйsshd
запускается) на удаленном компьютере.источник