#batch-file #file-io #ssh #sftp
#пакетный файл #file-io #ssh #sftp
Вопрос:
Я использую psftp.exe
для загрузки файлов с сервера. Есть ли простой способ удалить эти файлы после их загрузки, но оставить новые, которые могли появиться на сервере при загрузке, для загрузки в следующий раз?
Вот моя командная строка:
psftp.exe domain.com -i keysprivate.ppk
get *.xml
Редактировать: я хочу загрузить файлы из коробки Linux на ПК с Windows.
Ответ №1:
Нет простого способа сделать это с psftp
. Вам пришлось бы проанализировать его выходные данные, чтобы найти файлы, которые были успешно загружены.
Хотя вы можете легко сделать это с помощью WinSCP. Просто используйте get -delete *.xml
команду.
Полный скрипт WinSCP будет:
open sftp://domain.com/ -privatekey=keysprivate.ppk -hostkey=...
get -delete *.xml
exit
Смотрите Введение в WinSCP scripting.
Смотрите также руководство по преобразованию PSFTP-скрипта в WinSCP.
Вы также можете использовать WinSCP GUI для генерации скрипта, подобного этому, для вас.
(Я автор WinSCP)
Ответ №2:
Ответ Мартина хорош. Приведенный ниже вариант более промышленный.
Перемещение их в промежуточную область перед загрузкой может быть разумным.
Обычно вы перемещаете / переименовываете файлы на сервере в качестве отправной точки. Они все равно будут удалены, так что ничто не должно их пропустить? также вы не хотели бы возвращаться к последнему файлу. (поэтому перезапустите после этого момента в случае последующего сбоя)
Затем выполните загрузку. Затем выполните удаление.
Ответ №3:
Я бы подошел к проблеме по-другому. Вместо удаления файла с сервера, добавьте загруженное имя файла в локальную таблицу «Уже загруженные файлы». Затем, когда вы снова сканируете FTP на наличие новых файлов, игнорируйте все, что есть в этой таблице.
Таким образом, при следующем запуске скрипта загрузки вы получите только новые файлы, но старые файлы останутся на сервере.
У вас мог бы быть другой скрипт, который запускается периодически и удаляет все файлы старше определенного возраста.
WINSCP в порядке, и Мартин (автор) обращается практически к каждому потоку PuTTY, чтобы порекомендовать его, но это приложение, полностью основанное на графическом интерфейсе, и не для меня. Если вам действительно нужно, чтобы все выполнялось в командной строке, то WINSCP часто не подходит.
Комментарии:
1. WinSCP действительно имеет графический интерфейс. Но в нем также есть сценарии. И мой ответ показывает, как использовать его для решения проблемы. Итак, я не понимаю, что вы имеете в виду под «Если вам действительно нужно, чтобы все выполнялось в командной строке, тогда WINSCP часто не подходит» .
2. Я восхищаюсь твоей приверженностью выкладывать здесь собственное программное обеспечение, Мартин, но я думаю, что неплохо иметь и альтернативные решения. WinSCP хорош, но я нашел замену его на PSFTP.EXE использование PuTTY приводит к тому, что переводы завершаются намного быстрее, плюс сторонники open source в моей компании гораздо охотнее пользуются этим, чем чем-то со словом «Win» в названии.
3. Конечно, psftp тоже работает, я ничего не имею против. Я просто не понимаю конкретную часть, которую я процитировал .