2011-01-12 66 views
4

我是新来的Python,所以原谅我,如果这是基本的,我已经搜索,但无法找到答案。我试图将Perl脚本转换为连接到远程服务器的Python(3.x),并将给定目录中的文件复制到本地计算机。转移的完整性至关重要,并且内置了几个步骤以确保完整和准确的转移。是否可以通过SSH使用os.walk?

第一步是获取要传递给rsync的文件的完整列表。 Perl脚本具有以下行来实现:

@dir_list = `ssh [email protected] 'find $remote_dir -type f -exec /bin/dirname {} \\;'`; 
@file_list = `ssh [email protected] 'find $remote_dir -type f -exec /bin/basename {} \\;'`; 

两列被然后join版创建$ full_list。

而不是开放两个单独的ssh情况下,我想开一个,用os.walk获取使用信息:

for remdirname, remdirnames, remfilesnames in os.walk(remotedir): 
    for remfilename in remfilesnames: 
     remfulllist.append(os.path.join(remdirname, remfilename)) 

感谢您的帮助,您可以提供。

+1

除非'remotedir'挂载在某个地方,'os.walk'没有办法达到它。 –

+0

你是否指''dirlist'行的'-type d'?我认为下面的@Bryan注释,你可以基于从python调用ssh来计算dir_list和file_list。 – nealmcb

+0

如果你不需要任意的逻辑(即真正的Python代码)来处理要复制的文件列表,那么只要使用普通的rsync和includes/excludes/filters,你就会更加简单和健壮。 – mnagel

回答

3

不,os.walk不能以这种方式使用。

+0

听起来非常明确,谢谢。现在我只需要找到'ssh'命令行的最佳转换。 – LeoB

+2

@LeoB:除非我遗漏了一些东西,你可以通过一个单一的ssh命令来获得每个文件的完整路径(例如:find $ remote_dir -type f)。然后,迭代该结果并为每个完整路径计算dirname和filename。 –

相关问题