将多个文件从一个目录移动到远程 sftp 服务器上的另一个目录

Posted

技术标签:

【中文标题】将多个文件从一个目录移动到远程 sftp 服务器上的另一个目录【英文标题】:Move multiple file from one directory to another on remote sftp server 【发布时间】:2018-12-10 16:14:06 【问题描述】:

我正在使用以下命令连接到我的远程 sftp:

sftp user@host

输入密码后,我得到 sftp 提示,即

sftp>

我的工作是将多个文件从目录 A 移动到目录 B。 我可以通过重命名命令来做到这一点,但一次只能一个文件。 是否有任何命令/语法可以将文件列表从目录 A 移动到目录 B。如下所示:

rename /A/file1 /A/file2 B/

只是为了补充,我必须通过命令行来完成,只需要使用 sftp 协议,而不是像 fileZilla 或 winscp 这样的任何工具。

【问题讨论】:

只需安装filezilla软件。 filezilla-project.org/download.php?platform=win32 无法使用工具。我已经 hv winscp 和 filezilla 了。如果存在,需要通过一些命令来完成。 较旧的ftp 客户端在工具/选项方面差异很大。我不太确定sftp(而且我们不知道您使用的是什么版本),但请记住ftp 有一组m 命令(对于multi,我假设):mgetmput(至少)。查看您的在线帮助以查看您的 sftp 版本中是否还有其他 m 命令。祝你好运! 否则,您必须编写一个脚本,该脚本首先连接以获取所有可用文件的列表,然后再次连接以提供一系列rename 命令。或者,perlpython 可能有帮助解决此问题的功能。祝你好运。 lftp 客户端有mmv 选项...lftp.yar.ru/lftp-man.html 【参考方案1】:

您已在 cmets 中表明您正在尝试避免任何向 SFTP 服务器发出多个请求的事情。

实现最广泛的 SFTP 协议版本是Version 3, draft 02。值得注意的是,这是使用最广泛的 SFTP 服务器软件 OpenSSH 实现的版本。该版本的协议没有提及通配符,command to rename a file 将单个文件或目录从旧名称重命名为新名称。

重命名多个文件的任何客户端都必须对每个文件发出一个重命名操作,可能之前有一个或多个操作来获取要重命名的文件名。客户端可以为用户提供一个命令来重命名多个文件(或拖放选项,或其他),但在 SFTP 协议级别,它必须为每个文件发出至少一个 SFTP 请求。

【讨论】:

【参考方案2】:

必须是sftp吗?

您可以直接使用 ssh 作为块脚本发出命令。

ssh user@host '
    echo "Moving files"
    date
    rename /A/file1 /A/file2 B/
    date
' > logfile 2>&1

【讨论】:

是的,它的 SFTP 因为我只处理 sftp 服务器。【参考方案3】:

psftp 工具(来自 putty-tools)可以将多个文件移动到远程服务器上的另一个目录。这是我的使用方法,

mget *.ACT
ren *.ACT backup

如果ren 命令的第二个参数是目录,那么第一个参数可以是文件列表或通配符,它​​将所有文件移动到给定目录。

mv 命令也与ren 相同。

【讨论】:

【参考方案4】:

没有使用 sftp 的mv 命令。正如您所说,唯一的解决方案是使用rename


作为终端的解决方法,您可以在 python 中使用ftputil。 它有一个重命名功能:

rename(source, target)

它重命名 FTP 服务器上的源文件(或目录)。

这样,您可以轻松连接到服务器、列出目录,并创建一个循环来重命名列出的文件。

【讨论】:

Loop 表示对 stp 服务器的多个请求。这就是我要避免的。

以上是关于将多个文件从一个目录移动到远程 sftp 服务器上的另一个目录的主要内容,如果未能解决你的问题,请参考以下文章

SFTP取远程服务器取文件到本地

scp 或 sftp 使用单个命令复制多个文件

linux下如何使用sftp命令

SSIS 包将文件从一个文件夹移动到 SFTP (WinSCP) 中的另一个文件夹(SSIS 的 SFTP 任务)

用java写一个sftp客户端程序 能够上一个sftp的目录下载文件到本地指定目录

成功上传到 SFTP 服务器后删除本地 AIX 文件