如何使用Net::FTP在Ruby脚本中将远程FTP服务器上的文件移动到同一FTP服务器上的目录?

11
如何使用ruby脚本中的Net::FTP将远程FTP服务器上的文件移动到同一FTP服务器上的目录中。 我知道文件名,并使用ftp.mkdir创建了一个目录,但显然没有方法将文件移到创建的文件夹中。

1
请在此处查看解决方案:http://stackoverflow.com/a/17351238/1533054 - Sheharyar
3个回答

12

使用Net::FTP类的rename()方法可以移动文件(和目录)。示例:

ftp = Net::FTP.new("ftp.myserver.com","myusername","mypassword")
ftp.binary = true
ftp.passive = true

path1 = "/original/dir/path/"    # Dir to move
path2 = "/new/path/"             # New path of Dir

ftp.rename(path1, path2)

就是这样了!这将导致所有文件从同一FTP服务器上的一个路径移动到另一个路径。


你知道为什么需要前导斜杠吗? - shevy
1
他们不是。但我只是喜欢使用“绝对路径”以避免以后的混淆。 - Sheharyar

1

尝试使用重命名命令。如果不起作用,您可以尝试以下命令:“SITE mv oldpath newpath”。这会告诉服务器在服务器上执行该命令。预期行为不适用于所有服务器,而仅适用于某些服务器,因此仅在确保它将与特定服务器一起工作时才使用SITE命令。


是的,我尝试过这样 ftp.sendcmd("SITE mv #{f} inProcess/#{f}")。但是不起作用....会出现错误:500未知SITE命令。 - Chaitanya Wadekar
@user2164844,那么服务器要么根本不支持SITE命令,要么不支持通过SITE执行shell命令。那么重命名是唯一的选择(如果它能够起作用)。 - Eugene Mayevski 'Callback

0

putbinaryfileputtextfile实例方法。这不够吗?或者如果你只想在FTP服务器的范围内移动,那么有rename方法。


我想在FTP服务器的范围内移动。 使用情况是将有两个名为inProcess和processed的文件夹,以跟踪正在处理和待处理的文件。 - Chaitanya Wadekar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接