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.

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.)

An xftp session: connecting to a SharePoint site, listing a folder, downloading a spreadsheet, and uploading a report.

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.)

xcp uploading a spreadsheet to a library, downloading another back, and streaming a remote CSV into a pipe.

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.)

xsync mirroring a local folder to a library, a second run reporting already in sync, and a delete mirroring a removal.

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.)

xfind listing spreadsheets by name, listing folders, and counting PDFs through a pipe.

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.)

xtree printing a SharePoint library as an indented tree with a directory and file count.

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.

Get in touch

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.

xfiles is an independent set of tools, not affiliated with or endorsed by Microsoft Corporation. Microsoft, SharePoint, and Microsoft 365 are trademarks of Microsoft Corporation.