A toolkit from Excelano
xfiles
The Unix file tools, for SharePoint.
There is no FTP, SCP, rsync, find, or tree behind SharePoint — those protocols simply don't exist there. xfiles recreates them on top of the Microsoft Graph drive API: five small command-line tools that give a document library the feel your fingers already have. One sign-in covers them all, each is a single Go binary, and there's no daemon and no mounted drive.
Five tools, one feel
Each tool maps to a Unix utility you already know, and takes a SharePoint URL where that utility would take a path. Pick the one that fits the job.
xftp · ftp
An interactive session: browse and move files with ls, cd, get, put, mkdir, rm, mv.
xcp · scp
A one-shot copy of a single file to or from a library, in one command. Streams through - for pipes.
xsync · rsync
Mirror a whole directory tree to or from a library, transferring only what changed. --delete, --dry-run.
xfind · find
Walk a library and print matching paths, filtered by name, type, or depth — plain output, ready to pipe.
See it →xtree · tree
Print a library as an indented tree with a directory and file count. -L caps depth, -d folders only.
xftp — interactive sessions
Point xftp at a SharePoint site or folder and it binds the library and drops you at a prompt that shows where you are. From there it's an FTP session: ls and cd to move around, get and put to transfer, mkdir, rm, and mv to manage. Files over 250 MB upload in chunks with progress, downloads stream to a temp file renamed into place only once complete, and Ctrl-C cleans up after itself. (Sample data shown.)
xcp — one-shot copies
When you just need to move a single file and don't want a session, xcp mirrors scp: two arguments, a source and a destination, exactly one of them a SharePoint URL. Which side carries the URL sets the direction. Use - as the local side to stream instead of naming a file, so a remote file can cat straight into a pipe or a command's output can upload from stdin. (Sample data shown.)
xsync — recursive mirror
For whole trees, xsync is rsync for SharePoint. It mirrors a directory tree to or from a library and transfers only files that are new or changed, so a second run with nothing changed transfers nothing. --delete makes the destination an exact mirror, removing what's no longer in the source — it asks first in a terminal — and --dry-run previews the whole plan without touching anything. (Sample data shown.)
xfind — recursive search
Where ls shows one folder, xfind walks the whole library and prints one matching path per line, the way find prints paths relative to its starting directory. Filter by --name glob, --type f or --type d, and --maxdepth. Because the output is plain paths on stdout, it pipes into the usual tools. It is read-only. (Sample data shown.)
xtree — library at a glance
xtree prints the same recursive walk as an indented tree with a N directories, M files summary, the way tree does. -L caps the depth shown and -d lists folders only. Like xfind it is read-only — a quick way to see the shape of a library without clicking through it. (Sample data shown.)
Install
Each tool is a single binary for Linux and macOS, on x86_64 and arm64, with nothing to install alongside it.
On Debian or Ubuntu
Add the Excelano apt repository once, then install the whole suite as a single metapackage so apt upgrade keeps everything current:
curl -fsSL https://excelano.com/apt/setup.sh | sudo sh sudo apt install xfiles
xfiles is a metapackage that pulls in all five tools. To install just one, name it instead — sudo apt install xsync, for example.
With Homebrew
On macOS or Linux, so brew upgrade keeps them current. There's no metapackage, so name the tools — all five, or just the ones you want:
brew tap excelano/tap brew trust excelano/tap # one-time: Homebrew gates third-party taps behind explicit trust brew install xftp xcp xsync xfind xtree
Other platforms
Builds for Linux and macOS are on the GitHub releases page, and a one-line installer that drops all five binaries into one directory is in the README. With a Go toolchain, go install github.com/excelano/xfiles/cmd/xsync@latest (and the same for each tool) builds from source.
Behind the tool
SharePoint has none of these protocols, so giving it their feel meant rebuilding the whole experience on the Microsoft Graph drive API — paths, folders, chunked and resumable uploads, mtime-aware syncing, device-code auth, and a multi-tenant app registration — and hiding all of it behind commands people already know. Making Microsoft 365 behave the way people actually want to work with it is the kind of integration work I do for clients as an independent Microsoft 365 builder.
If you have files trapped in SharePoint and a workflow that should reach them but can't, that's the kind of problem I like being brought in on.
For technical users
xfiles is open source under the MIT license, written in pure Go. The full source lives at github.com/excelano/xfiles, with the security policy in SECURITY.md. All five tools authenticate through one multi-tenant Azure app registration, shared with the sibling xql, so consenting once covers them all, and they request a single scope, Sites.ReadWrite.All. If your organization restricts user consent, ADMINS.md has everything your IT department needs to review and approve them.
Need SQL against the same tenant instead of a file session? xql runs SELECT, UPDATE, INSERT, and DELETE against SharePoint lists from the command line.