如何在同一个FTP服务器上移动一组文件?

在远程FTP服务器上,我在remote.dir1目录中有一组文件。 我想将该目录中的所有文件移到remote.dir2

我正在使用lftp ,正在尝试这样的事情:

 lftp> mv remote.dir1/* remote.dir2/ 

它不起作用并显示: Access failed: 550 remote.dir1/*: The filename, directory name, or volume label syntax is incorrect.

我也试过:

 lftp> glob -a mv remote.dir1/* remote.dir2/ 

其中显示使用情况消息: Usage: mv <file1> <file2>

但是,移动单个文件的工作原理: lftp> mv remote.dir1/file1 remote.dir2/

作为最后的手段,我们可以构build一个包含一组lftp mv命令的文件并将其source
有没有我不知道的解决scheme?
或者,有任何有能力的命令行工具的任务?

编辑:我限于FTP环境,所以只有使用FTP的解决scheme是可以接受的由于环境约束。

出于文档的目的,我将发布我用来完成任务的步骤。 任何更好的解决scheme非常感谢。 😉

注意 :这个解决scheme使用lftp FTP客户端。 在继续之前,您可能需要将其安装在您的机器上。

解:

 lftp> renlist remote.dir1/ | "sed 's/\(.*\)/mv \"\1\" \"remote.dir2\/\"/'" > list lftp> source list lftp> !rm list 

或者, 单行TM

 lftp> renlist remote.dir1/ | "sed 's/\(.*\)/mv \"\1\" \"remote.dir2\/\"/'" > list && source list && !rm list 

看起来,lftp只支持glob命令接受单个参数的命令,所以需要两个参数的mv已经不存在了。

使用FTP,您的服务器可能允许扩展命令,特别是通过SITE EXEC或类似方式执行有限的命令集 – 检查FTP服务器的文档,帮助( SITE HELP )或login标志。 但是这些都不是标准化的,所以如果解决scheme需要FTP-server-agnostic,基于文件列表输出的脚本似乎是最好的主意。

rsync非常适合将文件从一台机器移动到另一台机器(甚至是在同一台机器上)。

 rsync -avz -e "ssh -i /key/path/key.rsa" user@1.2.3.4:/path/on/remote/server/ /path/on/local/server 

该命令提供一个私钥,并连接到一台机器。 它抓取远程目录中的文件,并将其复制到本地目录。 您也可以通过切换源和目标来做相反的处理。

晚了一点,但在2017年7月,“mmv”命令被添加到lftp。

 Usage: mmv [OPTS] <files> <target-dir> Move <files> to <target-directory> with wildcard expansion -O <dir> specifies the target directory (alternative way) 

所以,在你的情况下:

 mmv remote.dir1/* remote.dir2/ 

我以为FTP或多或less已经死了。 自从我使用它已经有将近五年的时间了,十年前它正在走出去。

这就是说,我总是发现ncftp系列的命令行工具非常友好,而且我预计这会“正常工作”。

我不打算build立一个FTP服务器来validation这一点,但试试看。 还有很多关于ncftp的东西(至less从版本2开始)。