Each cloud storage system is slightly different. Rclone attempts to provide a unified interface to them, but some underlying differences show through.
Here is an overview of the major features of each cloud storage system.
|Name||Hash||ModTime||Case Insensitive||Duplicate Files||MIME Type|
|Google Cloud Storage||MD5||Yes||No||No||R/W|
|Microsoft Azure Blob Storage||MD5||Yes||No||No||R/W|
|SFTP||MD5, SHA1 ‡||Yes||Depends||No||-|
|The local filesystem||All||Yes||Depends||No||-|
The cloud storage system supports various hash types of the objects.
The hashes are used when transferring data as an integrity check and
can be specifically used with the
--checksum flag in syncs and in
To use the verify checksums when transferring between cloud storage systems they must support a common hash type.
† Note that Dropbox supports its own custom hash. This is an SHA256 sum of all the 4MB block SHA256s.
‡ SFTP supports checksums if the same login has shell access and
sha1sum as well as
echo are in the remote’s PATH.
†† WebDAV supports modtimes when used with Owncloud and Nextcloud only.
The cloud storage system supports setting modification times on
objects. If it does then this enables a using the modification times
as part of the sync. If not then only the size will be checked by
default, though the MD5SUM can be checked with the
All cloud storage systems support some kind of date on the object and these will be set when transferring from the cloud storage system.
If a cloud storage systems is case sensitive then it is possible to
have two files which differ only in case, eg
FILE.txt. If a cloud storage system is case insensitive then that
This can cause problems when syncing between a case insensitive system and a case sensitive system. The symptom of this is that no matter how many times you run the sync it never completes fully.
The local filesystem and SFTP may or may not be case sensitive depending on OS.
Most of the time this doesn’t cause any problems as people tend to avoid files whose name differs only by case even on case sensitive systems.
If a cloud storage system allows duplicate files then it can have two objects with the same name.
This confuses rclone greatly when syncing - use the
command to rename or remove duplicates.
MIME types (also known as media types) classify types of documents
using a simple text classification, eg
Some cloud storage systems support reading (
R) the MIME type of
objects and some support writing (
W) the MIME type of objects.
The MIME type can be important if you are serving files directly to HTTP from the storage system.
If you are copying from a remote which supports reading (
R) to a
remote which supports writing (
W) then rclone will preserve the MIME
types. Otherwise they will be guessed from the extension, or the
remote itself may assign the MIME type.
All the remotes support a basic set of features, but there are some optional features supported by some remotes used to make some operations more efficient.
|Amazon Drive||Yes||No||Yes||Yes||No #575||No||No|
|Google Cloud Storage||Yes||Yes||No||No||No||Yes||Yes|
|Microsoft Azure Blob Storage||Yes||Yes||No||No||No||Yes||No|
|Microsoft OneDrive||Yes||Yes||Yes||No #197||No #575||No||No|
|Openstack Swift||Yes †||Yes||No||No||No||Yes||Yes|
|The local filesystem||Yes||No||Yes||Yes||No||No||Yes|
This deletes a directory quicker than just deleting all the files in the directory.
† Note Swift and Hubic implement this in order to delete directory markers but they don’t actually have a quicker way of deleting files other than deleting them individually.
‡ StreamUpload is not supported with Nextcloud
Used when copying an object to and from the same remote. This known
as a server side copy so you can copy a file without downloading it
and uploading it again. It is used if you use
rclone copy or
rclone move if the remote doesn’t support
If the server doesn’t support
Copy directly then for copy operations
the file is downloaded then re-uploaded.
Used when moving/renaming an object on the same remote. This is known
as a server side move of a file. This is used in
rclone move if the
server doesn’t support
If the server isn’t capable of
Move then rclone simulates it with
Copy then delete. If the server doesn’t support
Copy then rclone
will download the file and re-upload it.
This is used to implement
rclone move to move a directory if
possible. If it isn’t then it will use
Move on each file (which
falls back to
Copy then download and upload - see
This is used for emptying the trash for a remote by
If the server can’t do
rclone cleanup will return an
The remote supports a recursive list to list all the contents beneath
a directory quickly. This enables the
--fast-list flag to work.
See the rclone docs for more details.
Some remotes allow files to be uploaded without knowing the file size
in advance. This allows certain operations to work without spooling the
file to local disk first, e.g.