在远程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" [email protected]:/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开始)。