如何使用 smbclient 递归下载目录?

如何使用 smbclient 递归下载目录?

当我尝试使用 获取目录时get "Path To\Directory\",出现以下错误:

NT_STATUS_FILE_IS_A_DIRECTORY opening remote file Path To\Directory

我如何递归下载该目录?

(使用 smbclient v3.6.23。服务器是运行 Windows 7 家庭版的计算机。)

答案1

根据smbclient 手册页,您需要使用mget命令,带有maskrecursionprompt设置。然后cd到您想要递归获取的目录:

smbclient '\\server\share'
mask ""
recurse ON
prompt OFF
cd 'path\to\remote\dir'
lcd '~/path/to/download/to/'
mget *

或者,在一行中,

smbclient '\\server\share' -N -c 'prompt OFF;recurse ON;cd 'path\to\directory\';lcd '~/path/to/download/to/';mget *'`

如果您需要向服务器进行身份验证,请删除-N并使用连接命令上的密码设置。

http://technotize.blogspot.com/2011/12/copy-folder-with-ubuntu-smb-client.html

答案2

您还可以使用该tar命令smbclient

smbclient -Tc allfiles.tar /path/to/directory

allfiles.tar这将在执行命令的当前目录中创建一个 tar 存档smbclient。之后,你可以使用 再次解压文件tar xf allfiles.tar

答案3

使用 -D 选项设置目录

smbclient -D "\" -c ls
smbclient -D "\Path\To\Directory" -c ls

如果你想下载/获取文件,请这样做

smbclient -D "\Path\To\Directory" -c "get target /tmp/target"

答案4

除了上面的一行代码之外,我还找到了一个针对 Teamcity 隐藏密码提示的解决方案(构建步骤写为命令,TC 版本 2020.1.2):

smbclient '%smbPath%' '%smbPassword%' -W %domain% -U %smbUser% -c 'prompt OFF; recurse OFF; cd %smbSource%; lcd tomcat/conf; mget *'

在哪里

%smbPath%     = \\smbserver\share
%smbPassword% = domain user's password, use single quotes
%domain%      = domain
%smbUser%     = username
%smbSource%   = subdirectory(-ies) inside samba share (i.e. -D option)
recurse OFF   = in my case I don' want to recurse subfolders
tomcat/conf   = destination path relative to %system.teamcity.build.tempDir% (i.e. working directory) 

它会将所有文件从 samba 目录下载到构建代理上的工作目录。这里最大的问题是密码的正确引用。包含 的密码@#与用户名分开书写。转义模式%smbUser%%%%smbPassword%可能不起作用。

相关内容