samba-client-copy

This simple program allows to copy a folder or a file to a samba share.

It uses .NET 7.0 and the SMBLibrary portable library.

Tested under Ubuntu 20.04

Build

Execute :

cd src
dotnet restore
dotnet build --configuration Release --runtime ubuntu.20.04-x64 --no-self-contained -o /azp/bin -p:PublishSingleFile=true 

You could also make a symlink like this

ln -s /azp/bin/SambaFileCopy /bin/smbcp

Run

Usage

Example

To copy files inside /tmp/files to \\SERVER\SHARE\TempOutput\2023 :

SambaFileCopy --source /tmp/files/ --server 'SERVER' --tree 'SHARE' --destination 'TempOutput/2023' --username 'smbuser' --password 'smbpwd' --domain 'MYDOMAIN'

Notes

Not enough credits Exception

Sometimes this exception can be thrown :

Unhandled exception. System.Exception: Not enough credits
at SMBLibrary.Client.SMB2Client.TrySendCommand(SMB2Command request, Boolean encryptData)

There is a credit mechanism with the Samba protocol, it whill throttle the number of connections and data transferred by a client.

When transferring a lot of files, the only way I found to overcome this problem is to add a sleep between the write operations.

Path format

When using pathes for the destination (samba) share, it only accepts blackslashes, not slashes. Thus inside the code, slashes are replaced with backslashes.

Use this program at your own risk.