WinSCP - Как заархивировать, скачать и удалить файл?

6139
JohnDoea

Как можно заархивировать, скачать и удалить (ZDD) файл в WinSCP?

Например, ваш локальный каталог - «Рабочий стол», а ваш удаленный каталог (тот, который находится на вашем сервере), скажем, /var/www/htmlвы хотите заархивировать и загрузить определенный каталог или файл, а затем вы хотите, чтобы он был удален в момент загрузки законченный.


enter image description here


Для дальнейшего объяснения, в Linux я мог бы сделать, например:

( zip -r /var/www/html/dr.zip /var/www/html scp /var/www/html/dr.zip USER@IP:/location rm /var/www/html/dr.zip ) 

Мне нужна аналогичная вещь для WinSCP, но я знаю, что механизм загрузки WinSCP должен использоваться и что он отличается от scpутилиты Nix .

Мой вопрос:

Знаете ли вы, как добиться этого с WinSCP?

4
Там нет общего магического решения этого. Для начала нам нужно узнать, какой протокол вы используете в WinSCP. Martin Prikryl 7 лет назад 0
Привет Мартин! Для меня большая честь, что вы комментируете это! Я использую SFTP (на родном порту). Я знаю, что можно настраивать команды в WinSCP, но мне неясно, как можно настраивать многострочный набор команд, как я показал выше в этом вопросе. Более того, мне неясно, должны ли эти команды быть написаны на Bash или Powershell (?) Или применимы обе. Я смиренно надеюсь, что ответ на этот вопрос тоже будет таким. JohnDoea 7 лет назад 0

1 ответ на вопрос

4
Martin Prikryl

Невозможно архивировать файлы по любому протоколу передачи файлов (SFTP, FTP, SCP или WebDAV). Поэтому в WinSCP такой функции нет, так как она не может быть надежно реализована.


Хотя, если у вас есть доступ к серверу в командной оболочке, вы можете использовать команду оболочки для архивирования файлов. Это фактически то, что делает пользовательская команда Tar / GZip .

Если вы хотите сделать это за один раз (zip-and-download), вам нужно будет реализовать более сложную настраиваемую команду / расширение, которая открывает собственный сеанс для загрузки . Это было бы очень похоже на файлы Pack в ZIP-архив и загрузить его пример. За исключением того, что его использовали бы Session.ExecuteCommandдля выполнения zip(или аналогичного) на удаленном сервере.

Вы можете написать расширение на любом языке, который вам нравится. PowerShell - это самый доступный язык сценариев Windows с хорошей (нативной) поддержкой .NET. Хотя это можно сделать и в Bash, вы должны использовать локальный сценарий Bash (вы не можете загрузить файл с помощью удаленного сценария Bash). И нет Bash в Windows по умолчанию.

Я предполагаю, что если zip проблематичен, я мог бы использовать tar.gz, а затем легко распаковать его в Win10 с помощью Winrar или Winzip. Кроме того, если я правильно понимаю, если я не хочу загружать файл сценария и хочу вставить команду в WinSCP, я могу просто скопировать одну команду строки, как показано ниже, и сделать ее настраиваемой: `zip -r / var /www/html/dr.zip / var / www / html && scp /var/www/html/dr.zip USER @ IP: / location && rm / var / www / html / dr.zip`. JohnDoea 7 лет назад 0
Конечно, я мог бы просто заменить zip на tar. JohnDoea 7 лет назад 0
Я не уверен, что вы понимаете. `zip` не более или менее проблематичен, чем` gzip` / `tar`. Ограничением является доступ к оболочке. - И снова, вы не можете использовать удаленный скрипт / команду Bash для перетаскивания файлов с сервера в Windows, поэтому вы не можете использовать `scp` в пользовательской команде, так как она выполняется на сервере (конечно, если вы не запустите сервер SSH на локальной машине Windows). Martin Prikryl 7 лет назад 1
Ой, прости, я запутался там. Я имел в виду, что вместо `scp` было бы что-то еще (то же самое, что использует WinSCP) для загрузки файлов в Windows). JohnDoea 7 лет назад 0
Опять же, нет способа извлечь файлы, используя ** что-нибудь **, которое вы можете выполнить на сервере. Вы должны использовать локальный скрипт, который открывает собственное соединение для загрузки. Смотрите ссылки в моем ответе. Martin Prikryl 7 лет назад 1
О, теперь я тебя понимаю. Когда я нажимаю «Загрузить», он вызывает локальный скрипт (в отличие от скрипта, который я написал выше, который выполняется локально на сервере). Большое спасибо за разъяснение этого, и теперь я проверю ссылки. JohnDoea 7 лет назад 0
«Загрузка» является внутренней функцией WinSCP, она не выполняет никаких сценариев. Но в остальном, я полагаю, вы теперь понимаете концепцию. Martin Prikryl 7 лет назад 0

Похожие вопросы