44 votes

Comment puis-je télécharger de manière récursive un répertoire en utilisant smbclient ?

Lorsque j'essaie de récupérer un répertoire avec get "Chemin vers\Répertoire\", je reçois l'erreur suivante :

NT_STATUS_FILE_IS_A_DIRECTORY ouverture d'un fichier distant Répertoire Chemin

Comment puis-je télécharger ce répertoire récursivement ?

(En utilisant smbclient v3.6.23. Le serveur est un ordinateur exécutant Windows 7 Édition Familiale.)

84voto

Frank Thomas Points 33103

Conformément au manuel de smbclient, vous devez utiliser la commande mget, avec un mask et la récursivité, et prompt défini. Ensuite, faites un cd vers le répertoire que vous souhaitez obtenir de manière récursive :

smbclient '\\serveur\partage'
mask ""
recurse ON
prompt OFF
cd 'chemin\vers\le\repertoire\distante'
lcd '~/chemin/de/telechargement/vers/'
mget *

Ou, tout sur une seule ligne,

smbclient '\\serveur\partage' -N -c 'prompt OFF;recurse ON;cd 'chemin\vers\le\repertoire\';lcd '~/chemin/de/telechargement/vers/';mget *'`

Si vous devez vous authentifier sur le serveur, supprimez -N et utilisez le paramètre de mot de passe sur la commande de connexion.

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

2voto

user166826 Points 101

Utilisez l'option -D pour définir le répertoire

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

si vous voulez télécharger/obtenir le fichier, faites

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

2voto

m13r Points 121

Vous pouvez également utiliser la commande tar pour smbclient:

smbclient -Tc allfiles.tar /chemin/vers/le/dossier

Cela créera une archive tar allfiles.tar dans le répertoire actuel où la commande smbclient est exécutée. Ensuite, vous pouvez à nouveau décompresser les fichiers avec tar xf allfiles.tar.

1voto

Rapekas Points 111

En plus de la ligne ci-dessus, j'ai trouvé une solution pour Teamcity avec une invite de mot de passe masquée (étape de construction écrite sous forme de commande, version 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% = mot de passe de l'utilisateur du domaine, utilisez des guillemets simples
%domain%      = domaine
%smbUser%     = nom d'utilisateur
%smbSource%   = sous-répertoire(s) à l'intérieur du partage samba (c'est-à-dire l'option -D)
recurse OFF   = dans mon cas, je ne veux pas parcourir les sous-dossiers
tomcat/conf   = chemin de destination relatif à %system.teamcity.build.tempDir% (c'est-à-dire le répertoire de travail)

Il téléchargera tous les fichiers du répertoire samba dans le répertoire de travail sur l'agent de construction. Le plus grand problème ici est la bonne mise entre guillemets d'un mot de passe. Le mot de passe contenant @, # doit être écrit séparément du nom d'utilisateur. Le mode d'échappement %smbUser%%%%smbPassword% peut ne pas fonctionner.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X