3

В WinSCP 5.2 я хотел разместить несколько файлов с расширением .pgp на сайте SFTP. Когда я проверил мою исходную командную строку (см. Ниже), и она поместила только первый *.pgp алфавитный файл (D:\a.csv.pgp) на сайт SFTP. Я попытался указать *.PGP и *.pgp без каких-либо изменений - каждый раз будет копироваться только один файл (D:\a.csv.pgp). Я заставил его работать для всех файлов, только если я указал команду put для каждого файла .pgp . Любые идеи о том, как разместить все *.pgp на сайте SFTP?

Оригинальная командная строка - не работает
d:\winscp\winscp /command "option echo off" "option batch on" "option confirm off" "open sftp" "put D:\*.pgp" "close" "exit"

Работает
d:\winscp\winscp /command "option echo off" "option batch on" "option confirm off" "open sftp" "put D:\a.csv.pgp" "put D:\b.csv.pgp" "put D:\c.csv.pgp" "put D:\d.csv.pgp" "put D:\e.csv.pgp" "put D:\f.csv.pgp" "put D:\g.csv.pgp" "put D:\h.csv.pgp" "put D:\i.csv.pgp" "close" "exit"

3 ответа3

3

Вы, кажется, используете режим SFTP, а не режим SCP

Попробуйте mput *.pgp (предположение, основанное на командах FTP)

Руководство говорит, что подстановочные знаки должны работать

put <file> [ [ <file2> ... ] <directory>/[ <newname> ] ]
Если указан только один параметр, файл загружается в удаленный рабочий каталог. Если указано больше параметров, все, кроме последнего, указывают набор файлов для загрузки. Последний параметр указывает целевой удаленный каталог и, необязательно, маску операции для хранения файлов под другим именем. Каталог назначения должен заканчиваться косой чертой. Имя файла можно заменить на Windows wildcard1), чтобы выбрать несколько файлов. Чтобы загрузить больше файлов в текущий рабочий каталог, используйте ./ в качестве последнего параметра.

...

put *.html *.png /home/martin/backup/*.bak

Вы ДОЛЖНЫ поместить целевой каталог как последний элемент в цитируемой команде.

d:\winscp\winscp /command "option echo off" "option batch on" "option confirm off" "open sftp" "put D:\*.pgp ""C:\Documents and Settings\newtowinscp\Documents\Backups""" "close" "exit"

1

Если вы запускаете это из скрипта, вы можете просто создать цикл. Вы должны взять все файлы * .pgp и выполнить итерацию по списку. Вы бы на самом деле загружать файлы по отдельности; Я не верю, что SFTP/SCP на уровне протокола в любом случае перемещает несколько файлов одновременно, поэтому я не думаю, что это повлияет на производительность, возможно, это также упростит обработку ошибок.

Я считаю, что есть способ сделать это с помощью чистой встроенной командной строки, но в моих сценариях резервного копирования (я делаю обратное, я извлекаю файлы со своего SFTP-сайта) я использую эту программу (forfiles) от Microsoft: http://technet.microsoft.com/en-us/library/cc753551(WS.10).aspx . Я дам вам прочитать примеры того, как использовать его наиболее эффективно для ваших нужд. По сути, вы будете использовать подстановочный знак для имени файла, а затем выполнять команду загрузки для каждого экземпляра.

0

В вашей первой команде нет ничего плохого (с положением put D:\*.pgp).

Поскольку вы утверждаете, что загружен только один файл, это может произойти из-за некоторой ошибки, которая не позволяет сценарию продолжить работу с другими файлами. Это должно быть ошибка в работе, которая следует за фактической загрузкой (как это происходит успешно), такой как обновление временной метки загруженного файла или разрешений.

Например, эта ошибка: загрузка файла .. была успешной, но произошла ошибка при установке разрешений и / или отметки времени.Если проблема не устранена, отключите настройку разрешений или сохранение метки времени. Кроме того, вы можете включить опцию «Игнорировать ошибки прав доступа». ,

Вы должны четко видеть, что на самом деле не так в выходных данных скрипта или в файле журнала сеанса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .