当我尝试使用 获取目录时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
命令,带有mask
和recursion
和prompt
设置。然后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%
可能不起作用。