CINXE.COM
Swift
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content="Swift"> <meta name="author" content="Nick Craig-Wood"> <link rel="shortcut icon" type="image/png" href="/img/rclone-32x32.png"/> <script defer data-domain="rclone.org" src="https://weblog.rclone.org/js/script.js"></script> <title>Swift</title> <link rel="canonical" href="https://rclone.org/swift/"> <link href="/css/bootstrap.min.4.4.1.css" rel="stylesheet"> <link href="/css/font-awesome.min.5.10.2.css" rel="stylesheet"> <link href="/css/custom.css?r=-62135596800" rel="stylesheet"> </head> <body> <nav class="navbar navbar-expand-md navbar-dark bg-dark"> <a class="navbar-brand" href="/"><img class="rclone-logo" src="/img/logo_on_dark__horizontal_color.svg" alt="rclone logo"></a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav mr-auto"> <li class="nav-item active"> <a class="nav-link" href="/downloads/">Downloads</a> </li> <li class="nav-item active dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Docs </a> <div class="dropdown-menu" aria-labelledby="navbarDropdown"> <a class="dropdown-item" href="/install/"><i class="fa fa-book fa-fw"></i> Installation</a> <a class="dropdown-item" href="/docs/"><i class="fa fa-book fa-fw"></i> Usage</a> <a class="dropdown-item" href="/filtering/"><i class="fa fa-book fa-fw"></i> Filtering</a> <a class="dropdown-item" href="/gui/"><i class="fa fa-book fa-fw"></i> GUI</a> <a class="dropdown-item" href="/rc/"><i class="fa fa-book fa-fw"></i> Remote Control</a> <a class="dropdown-item" href="/changelog/"><i class="fa fa-book fa-fw"></i> Changelog</a> <a class="dropdown-item" href="/bugs/"><i class="fa fa-book fa-fw"></i> Bugs</a> <a class="dropdown-item" href="/faq/"><i class="fa fa-book fa-fw"></i> FAQ</a> <a class="dropdown-item" href="/flags/"><i class="fa fa-book fa-fw"></i> Flags</a> <a class="dropdown-item" href="/licence/"><i class="fa fa-book fa-fw"></i> Licence</a> <a class="dropdown-item" href="/authors/"><i class="fa fa-book fa-fw"></i> Authors</a> <a class="dropdown-item" href="/privacy/"><i class="fa fa-book fa-fw"></i> Privacy Policy</a> </div> </li> <li class="nav-item active dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Commands </a> <div class="dropdown-menu pre-scrollable" aria-labelledby="navbarDropdown"> <a class="dropdown-item" href="/commands/"><i class="fas fa-map fa-fw"></i> Overview</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/commands/rclone/"><i class="fa fa-book fa-fw"></i> rclone</a> <a class="dropdown-item" href="/commands/rclone_about/"><i class="fa fa-book fa-fw"></i> rclone about</a> <a class="dropdown-item" href="/commands/rclone_authorize/"><i class="fa fa-book fa-fw"></i> rclone authorize</a> <a class="dropdown-item" href="/commands/rclone_backend/"><i class="fa fa-book fa-fw"></i> rclone backend</a> <a class="dropdown-item" href="/commands/rclone_bisync/"><i class="fa fa-book fa-fw"></i> rclone bisync</a> <a class="dropdown-item" href="/commands/rclone_cat/"><i class="fa fa-book fa-fw"></i> rclone cat</a> <a class="dropdown-item" href="/commands/rclone_check/"><i class="fa fa-book fa-fw"></i> rclone check</a> <a class="dropdown-item" href="/commands/rclone_checksum/"><i class="fa fa-book fa-fw"></i> rclone checksum</a> <a class="dropdown-item" href="/commands/rclone_cleanup/"><i class="fa fa-book fa-fw"></i> rclone cleanup</a> <a class="dropdown-item" href="/commands/rclone_completion/"><i class="fa fa-book fa-fw"></i> rclone completion</a> <a class="dropdown-item" href="/commands/rclone_config/"><i class="fa fa-book fa-fw"></i> rclone config</a> <a class="dropdown-item" href="/commands/rclone_copy/"><i class="fa fa-book fa-fw"></i> rclone copy</a> <a class="dropdown-item" href="/commands/rclone_copyto/"><i class="fa fa-book fa-fw"></i> rclone copyto</a> <a class="dropdown-item" href="/commands/rclone_copyurl/"><i class="fa fa-book fa-fw"></i> rclone copyurl</a> <a class="dropdown-item" href="/commands/rclone_cryptcheck/"><i class="fa fa-book fa-fw"></i> rclone cryptcheck</a> <a class="dropdown-item" href="/commands/rclone_cryptdecode/"><i class="fa fa-book fa-fw"></i> rclone cryptdecode</a> <a class="dropdown-item" href="/commands/rclone_dedupe/"><i class="fa fa-book fa-fw"></i> rclone dedupe</a> <a class="dropdown-item" href="/commands/rclone_delete/"><i class="fa fa-book fa-fw"></i> rclone delete</a> <a class="dropdown-item" href="/commands/rclone_deletefile/"><i class="fa fa-book fa-fw"></i> rclone deletefile</a> <a class="dropdown-item" href="/commands/rclone_gendocs/"><i class="fa fa-book fa-fw"></i> rclone gendocs</a> <a class="dropdown-item" href="/commands/rclone_gitannex/"><i class="fa fa-book fa-fw"></i> rclone gitannex</a> <a class="dropdown-item" href="/commands/rclone_hashsum/"><i class="fa fa-book fa-fw"></i> rclone hashsum</a> <a class="dropdown-item" href="/commands/rclone_link/"><i class="fa fa-book fa-fw"></i> rclone link</a> <a class="dropdown-item" href="/commands/rclone_listremotes/"><i class="fa fa-book fa-fw"></i> rclone listremotes</a> <a class="dropdown-item" href="/commands/rclone_ls/"><i class="fa fa-book fa-fw"></i> rclone ls</a> <a class="dropdown-item" href="/commands/rclone_lsd/"><i class="fa fa-book fa-fw"></i> rclone lsd</a> <a class="dropdown-item" href="/commands/rclone_lsf/"><i class="fa fa-book fa-fw"></i> rclone lsf</a> <a class="dropdown-item" href="/commands/rclone_lsjson/"><i class="fa fa-book fa-fw"></i> rclone lsjson</a> <a class="dropdown-item" href="/commands/rclone_lsl/"><i class="fa fa-book fa-fw"></i> rclone lsl</a> <a class="dropdown-item" href="/commands/rclone_md5sum/"><i class="fa fa-book fa-fw"></i> rclone md5sum</a> <a class="dropdown-item" href="/commands/rclone_mkdir/"><i class="fa fa-book fa-fw"></i> rclone mkdir</a> <a class="dropdown-item" href="/commands/rclone_mount/"><i class="fa fa-book fa-fw"></i> rclone mount</a> <a class="dropdown-item" href="/commands/rclone_move/"><i class="fa fa-book fa-fw"></i> rclone move</a> <a class="dropdown-item" href="/commands/rclone_moveto/"><i class="fa fa-book fa-fw"></i> rclone moveto</a> <a class="dropdown-item" href="/commands/rclone_ncdu/"><i class="fa fa-book fa-fw"></i> rclone ncdu</a> <a class="dropdown-item" href="/commands/rclone_nfsmount/"><i class="fa fa-book fa-fw"></i> rclone nfsmount</a> <a class="dropdown-item" href="/commands/rclone_obscure/"><i class="fa fa-book fa-fw"></i> rclone obscure</a> <a class="dropdown-item" href="/commands/rclone_purge/"><i class="fa fa-book fa-fw"></i> rclone purge</a> <a class="dropdown-item" href="/commands/rclone_rc/"><i class="fa fa-book fa-fw"></i> rclone rc</a> <a class="dropdown-item" href="/commands/rclone_rcat/"><i class="fa fa-book fa-fw"></i> rclone rcat</a> <a class="dropdown-item" href="/commands/rclone_rcd/"><i class="fa fa-book fa-fw"></i> rclone rcd</a> <a class="dropdown-item" href="/commands/rclone_rmdir/"><i class="fa fa-book fa-fw"></i> rclone rmdir</a> <a class="dropdown-item" href="/commands/rclone_rmdirs/"><i class="fa fa-book fa-fw"></i> rclone rmdirs</a> <a class="dropdown-item" href="/commands/rclone_selfupdate/"><i class="fa fa-book fa-fw"></i> rclone selfupdate</a> <a class="dropdown-item" href="/commands/rclone_serve/"><i class="fa fa-book fa-fw"></i> rclone serve</a> <a class="dropdown-item" href="/commands/rclone_settier/"><i class="fa fa-book fa-fw"></i> rclone settier</a> <a class="dropdown-item" href="/commands/rclone_sha1sum/"><i class="fa fa-book fa-fw"></i> rclone sha1sum</a> <a class="dropdown-item" href="/commands/rclone_size/"><i class="fa fa-book fa-fw"></i> rclone size</a> <a class="dropdown-item" href="/commands/rclone_sync/"><i class="fa fa-book fa-fw"></i> rclone sync</a> <a class="dropdown-item" href="/commands/rclone_test/"><i class="fa fa-book fa-fw"></i> rclone test</a> <a class="dropdown-item" href="/commands/rclone_touch/"><i class="fa fa-book fa-fw"></i> rclone touch</a> <a class="dropdown-item" href="/commands/rclone_tree/"><i class="fa fa-book fa-fw"></i> rclone tree</a> <a class="dropdown-item" href="/commands/rclone_version/"><i class="fa fa-book fa-fw"></i> rclone version</a> </div> </li> <li class="nav-item active dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Storage Systems </a> <div class="dropdown-menu pre-scrollable" aria-labelledby="navbarDropdown"> <a class="dropdown-item" href="/overview/"><i class="fas fa-map fa-fw"></i> Overview</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/fichier/"><i class="fa fa-archive fa-fw"></i> 1Fichier</a> <a class="dropdown-item" href="/netstorage/"><i class="fas fa-database fa-fw"></i> Akamai NetStorage</a> <a class="dropdown-item" href="/alias/"><i class="fa fa-link fa-fw"></i> Alias</a> <a class="dropdown-item" href="/s3/"><i class="fab fa-amazon fa-fw"></i> Amazon S3</a> <a class="dropdown-item" href="/b2/"><i class="fa fa-fire fa-fw"></i> Backblaze B2</a> <a class="dropdown-item" href="/box/"><i class="fa fa-archive fa-fw"></i> Box</a> <a class="dropdown-item" href="/chunker/"><i class="fa fa-cut fa-fw"></i> Chunker (splits large files)</a> <a class="dropdown-item" href="/compress/"><i class="fas fa-compress fa-fw"></i> Compress (transparent gzip compression)</a> <a class="dropdown-item" href="/combine/"><i class="fa fa-folder-plus fa-fw"></i> Combine (remotes into a directory tree)</a> <a class="dropdown-item" href="/sharefile/"><i class="fas fa-share-square fa-fw"></i> Citrix ShareFile</a> <a class="dropdown-item" href="/crypt/"><i class="fa fa-lock fa-fw"></i> Crypt (encrypts the others)</a> <a class="dropdown-item" href="/koofr/#digi-storage"><i class="fa fa-cloud fa-fw"></i> Digi Storage</a> <a class="dropdown-item" href="/dropbox/"><i class="fab fa-dropbox fa-fw"></i> Dropbox</a> <a class="dropdown-item" href="/filefabric/"><i class="fa fa-cloud fa-fw"></i> Enterprise File Fabric</a> <a class="dropdown-item" href="/filescom/"><i class="fa fa-file-alt fa-fw"></i> Files.com</a> <a class="dropdown-item" href="/ftp/"><i class="fa fa-file fa-fw"></i> FTP</a> <a class="dropdown-item" href="/gofile/"><i class="fa fa-folder fa-fw"></i> Gofile</a> <a class="dropdown-item" href="/googlecloudstorage/"><i class="fab fa-google fa-fw"></i> Google Cloud Storage</a> <a class="dropdown-item" href="/drive/"><i class="fab fa-google fa-fw"></i> Google Drive</a> <a class="dropdown-item" href="/googlephotos/"><i class="fas fa-images fa-fw"></i> Google Photos</a> <a class="dropdown-item" href="/hasher/"><i class="fa fa-check-double fa-fw"></i> Hasher (better checksums for others)</a> <a class="dropdown-item" href="/hdfs/"><i class="fa fa-globe fa-fw"></i> HDFS (Hadoop Distributed Filesystem)</a> <a class="dropdown-item" href="/hidrive/"><i class="fa fa-cloud fa-fw"></i> HiDrive</a> <a class="dropdown-item" href="/http/"><i class="fa fa-globe fa-fw"></i> HTTP</a> <a class="dropdown-item" href="/imagekit/"><i class="fa fa-cloud fa-fw"></i> ImageKit</a> <a class="dropdown-item" href="/internetarchive/"><i class="fa fa-archive fa-fw"></i> Internet Archive</a> <a class="dropdown-item" href="/jottacloud/"><i class="fa fa-cloud fa-fw"></i> Jottacloud</a> <a class="dropdown-item" href="/koofr/"><i class="fa fa-suitcase fa-fw"></i> Koofr</a> <a class="dropdown-item" href="/linkbox/"><i class="fa fa-infinity fa-fw"></i> Linkbox</a> <a class="dropdown-item" href="/mailru/"><i class="fa fa-at fa-fw"></i> Mail.ru Cloud</a> <a class="dropdown-item" href="/mega/"><i class="fa fa-archive fa-fw"></i> Mega</a> <a class="dropdown-item" href="/memory/"><i class="fas fa-memory fa-fw"></i> Memory</a> <a class="dropdown-item" href="/azureblob/"><i class="fab fa-windows fa-fw"></i> Microsoft Azure Blob Storage</a> <a class="dropdown-item" href="/azurefiles/"><i class="fab fa-windows fa-fw"></i> Microsoft Azure Files Storage</a> <a class="dropdown-item" href="/onedrive/"><i class="fab fa-windows fa-fw"></i> Microsoft OneDrive</a> <a class="dropdown-item" href="/opendrive/"><i class="fa fa-space-shuttle fa-fw"></i> OpenDrive</a> <a class="dropdown-item" href="/qingstor/"><i class="fas fa-hdd fa-fw"></i> QingStor</a> <a class="dropdown-item" href="/swift/"><i class="fa fa-space-shuttle fa-fw"></i> Openstack Swift</a> <a class="dropdown-item" href="/oracleobjectstorage/"><i class="fa fa-cloud fa-fw"></i> Oracle Object Storage</a> <a class="dropdown-item" href="/pcloud/"><i class="fa fa-cloud fa-fw"></i> pCloud</a> <a class="dropdown-item" href="/pikpak/"><i class="fa fa-cloud fa-fw"></i> PikPak</a> <a class="dropdown-item" href="/pixeldrain/"><i class="fa fa-circle fa-fw"></i> Pixeldrain</a> <a class="dropdown-item" href="/premiumizeme/"><i class="fa fa-user fa-fw"></i> premiumize.me</a> <a class="dropdown-item" href="/putio/"><i class="fas fa-parking fa-fw"></i> put.io</a> <a class="dropdown-item" href="/protondrive/"><i class="fas fa-folder fa-fw"></i> Proton Drive</a> <a class="dropdown-item" href="/quatrix/"><i class="fas fa-shield-alt fa-fw"></i> Quatrix</a> <a class="dropdown-item" href="/seafile/"><i class="fa fa-server fa-fw"></i> Seafile</a> <a class="dropdown-item" href="/sftp/"><i class="fa fa-server fa-fw"></i> SFTP</a> <a class="dropdown-item" href="/sia/"><i class="fa fa-globe fa-fw"></i> Sia</a> <a class="dropdown-item" href="/smb/"><i class="fa fa-server fa-fw"></i> SMB / CIFS</a> <a class="dropdown-item" href="/storj/"><i class="fas fa-dove fa-fw"></i> Storj</a> <a class="dropdown-item" href="/sugarsync/"><i class="fas fa-dove fa-fw"></i> SugarSync</a> <a class="dropdown-item" href="/ulozto/"><i class="fas fa-angle-double-down fa-fw"></i> Uloz.to</a> <a class="dropdown-item" href="/uptobox/"><i class="fa fa-archive fa-fw"></i> Uptobox</a> <a class="dropdown-item" href="/union/"><i class="fa fa-link fa-fw"></i> Union (merge backends)</a> <a class="dropdown-item" href="/webdav/"><i class="fa fa-server fa-fw"></i> WebDAV</a> <a class="dropdown-item" href="/yandex/"><i class="fa fa-space-shuttle fa-fw"></i> Yandex Disk</a> <a class="dropdown-item" href="/zoho/"><i class="fas fa-folder fa-fw"></i> Zoho WorkDrive</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/local/"><i class="fas fa-hdd fa-fw"></i> The local filesystem</a> </div> </li> <li class="nav-item active"> <a class="nav-link" href="/contact/"><i class="fa fa-envelope fa-fw"></i> Contact</a> </li> <li class="nav-item active"> <a class="nav-link" href="/sponsor/"><i class="fa fa-heart heart fa-fw"></i> Sponsor</a> </li> </ul> <ul class="navbar-nav mr-auto"> <li class="nav-item active"> <a href="https://rclone.com/" target="_blank" class="nav-link bizbutton" title="Click here for support and advertising contracts"><i class="fa fa-briefcase"></i> For Business</a> </li> </ul> <form class="form-inline" name="search_form" action="https://google.com/search" target="_blank" onsubmit="on_search();"> <input name="words" value="" type="search" placeholder="search..." class="form-control form-control-sm"> <input name="q" value="" type="hidden"> <input name="as_sitesearch" value="https://rclone.org/" type="hidden"> </form> </div> </nav> <div class="container-fluid"> <div class="row"> <div class="col-md-9"> <span class="badge badge-pill badge-secondary float-right" style="margin-top: 30px; font-size: 100%" title="This feature needs Rclone v0.91 or later.">v0.91</span> <h1 id="hahahugoshortcode74s0hbhb-swift"><i class="fa fa-space-shuttle" aria-hidden="true"></i> Swift</h1> <p>Swift refers to <a href="https://docs.openstack.org/swift/latest/">OpenStack Object Storage</a>. Commercial implementations of that being:</p> <ul> <li><a href="https://www.rackspace.com/cloud/files/">Rackspace Cloud Files</a></li> <li><a href="https://www.memset.com/cloud/storage/">Memset Memstore</a></li> <li><a href="https://www.ovh.co.uk/public-cloud/storage/object-storage/">OVH Object Storage</a></li> <li><a href="https://docs.oracle.com/en-us/iaas/integration/doc/configure-object-storage.html">Oracle Cloud Storage</a></li> <li><a href="https://www.blomp.com/cloud-storage/">Blomp Cloud Storage</a></li> <li><a href="https://console.bluemix.net/docs/infrastructure/objectstorage-swift/index.html">IBM Bluemix Cloud ObjectStorage Swift</a></li> </ul> <p>Paths are specified as <code>remote:container</code> (or <code>remote:</code> for the <code>lsd</code> command.) You may put subdirectories in too, e.g. <code>remote:container/path/to/dir</code>.</p> <h2 id="configuration">Configuration</h2> <p>Here is an example of making a swift configuration. First run</p> <pre><code>rclone config </code></pre> <p>This will guide you through an interactive setup process.</p> <pre tabindex="0"><code>No remotes found, make a new one? n) New remote s) Set configuration password q) Quit config n/s/q> n name> remote Type of storage to configure. Choose a number from below, or type in your own value [snip] XX / OpenStack Swift (Rackspace Cloud Files, Blomp Cloud Storage, Memset Memstore, OVH) \ "swift" [snip] Storage> swift Get swift credentials from environment variables in standard OpenStack form. Choose a number from below, or type in your own value 1 / Enter swift credentials in the next step \ "false" 2 / Get swift credentials from environment vars. Leave other fields blank if using this. \ "true" env_auth> true User name to log in (OS_USERNAME). user> API key or password (OS_PASSWORD). key> Authentication URL for server (OS_AUTH_URL). Choose a number from below, or type in your own value 1 / Rackspace US \ "https://auth.api.rackspacecloud.com/v1.0" 2 / Rackspace UK \ "https://lon.auth.api.rackspacecloud.com/v1.0" 3 / Rackspace v2 \ "https://identity.api.rackspacecloud.com/v2.0" 4 / Memset Memstore UK \ "https://auth.storage.memset.com/v1.0" 5 / Memset Memstore UK v2 \ "https://auth.storage.memset.com/v2.0" 6 / OVH \ "https://auth.cloud.ovh.net/v3" 7 / Blomp Cloud Storage \ "https://authenticate.ain.net" auth> User ID to log in - optional - most swift systems use user and leave this blank (v3 auth) (OS_USER_ID). user_id> User domain - optional (v3 auth) (OS_USER_DOMAIN_NAME) domain> Tenant name - optional for v1 auth, this or tenant_id required otherwise (OS_TENANT_NAME or OS_PROJECT_NAME) tenant> Tenant ID - optional for v1 auth, this or tenant required otherwise (OS_TENANT_ID) tenant_id> Tenant domain - optional (v3 auth) (OS_PROJECT_DOMAIN_NAME) tenant_domain> Region name - optional (OS_REGION_NAME) region> Storage URL - optional (OS_STORAGE_URL) storage_url> Auth Token from alternate authentication - optional (OS_AUTH_TOKEN) auth_token> AuthVersion - optional - set to (1,2,3) if your auth URL has no version (ST_AUTH_VERSION) auth_version> Endpoint type to choose from the service catalogue (OS_ENDPOINT_TYPE) Choose a number from below, or type in your own value 1 / Public (default, choose this if not sure) \ "public" 2 / Internal (use internal service net) \ "internal" 3 / Admin \ "admin" endpoint_type> Remote config -------------------- [test] env_auth = true user = key = auth = user_id = domain = tenant = tenant_id = tenant_domain = region = storage_url = auth_token = auth_version = endpoint_type = -------------------- y) Yes this is OK e) Edit this remote d) Delete this remote y/e/d> y </code></pre><p>This remote is called <code>remote</code> and can now be used like this</p> <p>See all containers</p> <pre><code>rclone lsd remote: </code></pre> <p>Make a new container</p> <pre><code>rclone mkdir remote:container </code></pre> <p>List the contents of a container</p> <pre><code>rclone ls remote:container </code></pre> <p>Sync <code>/home/local/directory</code> to the remote container, deleting any excess files in the container.</p> <pre><code>rclone sync --interactive /home/local/directory remote:container </code></pre> <h3 id="configuration-from-an-openstack-credentials-file">Configuration from an OpenStack credentials file</h3> <p>An OpenStack credentials file typically looks something something like this (without the comments)</p> <pre tabindex="0"><code>export OS_AUTH_URL=https://a.provider.net/v2.0 export OS_TENANT_ID=ffffffffffffffffffffffffffffffff export OS_TENANT_NAME="1234567890123456" export OS_USERNAME="123abc567xy" echo "Please enter your OpenStack Password: " read -sr OS_PASSWORD_INPUT export OS_PASSWORD=$OS_PASSWORD_INPUT export OS_REGION_NAME="SBG1" if [ -z "$OS_REGION_NAME" ]; then unset OS_REGION_NAME; fi </code></pre><p>The config file needs to look something like this where <code>$OS_USERNAME</code> represents the value of the <code>OS_USERNAME</code> variable - <code>123abc567xy</code> in the example above.</p> <pre tabindex="0"><code>[remote] type = swift user = $OS_USERNAME key = $OS_PASSWORD auth = $OS_AUTH_URL tenant = $OS_TENANT_NAME </code></pre><p>Note that you may (or may not) need to set <code>region</code> too - try without first.</p> <h3 id="configuration-from-the-environment">Configuration from the environment</h3> <p>If you prefer you can configure rclone to use swift using a standard set of OpenStack environment variables.</p> <p>When you run through the config, make sure you choose <code>true</code> for <code>env_auth</code> and leave everything else blank.</p> <p>rclone will then set any empty config parameters from the environment using standard OpenStack environment variables. There is <a href="https://godoc.org/github.com/ncw/swift#Connection.ApplyEnvironment">a list of the variables</a> in the docs for the swift library.</p> <h3 id="using-an-alternate-authentication-method">Using an alternate authentication method</h3> <p>If your OpenStack installation uses a non-standard authentication method that might not be yet supported by rclone or the underlying swift library, you can authenticate externally (e.g. calling manually the <code>openstack</code> commands to get a token). Then, you just need to pass the two configuration variables <code>auth_token</code> and <code>storage_url</code>. If they are both provided, the other variables are ignored. rclone will not try to authenticate but instead assume it is already authenticated and use these two variables to access the OpenStack installation.</p> <h4 id="using-rclone-without-a-config-file">Using rclone without a config file</h4> <p>You can use rclone with swift without a config file, if desired, like this:</p> <pre tabindex="0"><code>source openstack-credentials-file export RCLONE_CONFIG_MYREMOTE_TYPE=swift export RCLONE_CONFIG_MYREMOTE_ENV_AUTH=true rclone lsd myremote: </code></pre><h3 id="fast-list">--fast-list</h3> <p>This remote supports <code>--fast-list</code> which allows you to use fewer transactions in exchange for more memory. See the <a href="/docs/#fast-list">rclone docs</a> for more details.</p> <h3 id="update-and-use-server-modtime">--update and --use-server-modtime</h3> <p>As noted below, the modified time is stored on metadata on the object. It is used by default for all operations that require checking the time a file was last updated. It allows rclone to treat the remote more like a true filesystem, but it is inefficient because it requires an extra API call to retrieve the metadata.</p> <p>For many operations, the time the object was last uploaded to the remote is sufficient to determine if it is "dirty". By using <code>--update</code> along with <code>--use-server-modtime</code>, you can avoid the extra API call and simply upload files whose local modtime is newer than the time it was last uploaded.</p> <h3 id="modification-times-and-hashes">Modification times and hashes</h3> <p>The modified time is stored as metadata on the object as <code>X-Object-Meta-Mtime</code> as floating point since the epoch accurate to 1 ns.</p> <p>This is a de facto standard (used in the official python-swiftclient amongst others) for storing the modification time for an object.</p> <p>The MD5 hash algorithm is supported.</p> <h3 id="restricted-filename-characters">Restricted filename characters</h3> <table> <thead> <tr> <th>Character</th> <th style="text-align:center">Value</th> <th style="text-align:center">Replacement</th> </tr> </thead> <tbody> <tr> <td>NUL</td> <td style="text-align:center">0x00</td> <td style="text-align:center">␀</td> </tr> <tr> <td>/</td> <td style="text-align:center">0x2F</td> <td style="text-align:center">/</td> </tr> </tbody> </table> <p>Invalid UTF-8 bytes will also be <a href="/overview/#invalid-utf8">replaced</a>, as they can't be used in JSON strings.</p> <h3 id="standard-options">Standard options</h3> <p>Here are the Standard options specific to swift (OpenStack Swift (Rackspace Cloud Files, Blomp Cloud Storage, Memset Memstore, OVH)).</p> <h4 id="swift-env-auth">--swift-env-auth</h4> <p>Get swift credentials from environment variables in standard OpenStack form.</p> <p>Properties:</p> <ul> <li>Config: env_auth</li> <li>Env Var: RCLONE_SWIFT_ENV_AUTH</li> <li>Type: bool</li> <li>Default: false</li> <li>Examples: <ul> <li>"false" <ul> <li>Enter swift credentials in the next step.</li> </ul> </li> <li>"true" <ul> <li>Get swift credentials from environment vars.</li> <li>Leave other fields blank if using this.</li> </ul> </li> </ul> </li> </ul> <h4 id="swift-user">--swift-user</h4> <p>User name to log in (OS_USERNAME).</p> <p>Properties:</p> <ul> <li>Config: user</li> <li>Env Var: RCLONE_SWIFT_USER</li> <li>Type: string</li> <li>Required: false</li> </ul> <h4 id="swift-key">--swift-key</h4> <p>API key or password (OS_PASSWORD).</p> <p>Properties:</p> <ul> <li>Config: key</li> <li>Env Var: RCLONE_SWIFT_KEY</li> <li>Type: string</li> <li>Required: false</li> </ul> <h4 id="swift-auth">--swift-auth</h4> <p>Authentication URL for server (OS_AUTH_URL).</p> <p>Properties:</p> <ul> <li>Config: auth</li> <li>Env Var: RCLONE_SWIFT_AUTH</li> <li>Type: string</li> <li>Required: false</li> <li>Examples: <ul> <li>"https://auth.api.rackspacecloud.com/v1.0" <ul> <li>Rackspace US</li> </ul> </li> <li>"https://lon.auth.api.rackspacecloud.com/v1.0" <ul> <li>Rackspace UK</li> </ul> </li> <li>"https://identity.api.rackspacecloud.com/v2.0" <ul> <li>Rackspace v2</li> </ul> </li> <li>"https://auth.storage.memset.com/v1.0" <ul> <li>Memset Memstore UK</li> </ul> </li> <li>"https://auth.storage.memset.com/v2.0" <ul> <li>Memset Memstore UK v2</li> </ul> </li> <li>"https://auth.cloud.ovh.net/v3" <ul> <li>OVH</li> </ul> </li> <li>"https://authenticate.ain.net" <ul> <li>Blomp Cloud Storage</li> </ul> </li> </ul> </li> </ul> <h4 id="swift-user-id">--swift-user-id</h4> <p>User ID to log in - optional - most swift systems use user and leave this blank (v3 auth) (OS_USER_ID).</p> <p>Properties:</p> <ul> <li>Config: user_id</li> <li>Env Var: RCLONE_SWIFT_USER_ID</li> <li>Type: string</li> <li>Required: false</li> </ul> <h4 id="swift-domain">--swift-domain</h4> <p>User domain - optional (v3 auth) (OS_USER_DOMAIN_NAME)</p> <p>Properties:</p> <ul> <li>Config: domain</li> <li>Env Var: RCLONE_SWIFT_DOMAIN</li> <li>Type: string</li> <li>Required: false</li> </ul> <h4 id="swift-tenant">--swift-tenant</h4> <p>Tenant name - optional for v1 auth, this or tenant_id required otherwise (OS_TENANT_NAME or OS_PROJECT_NAME).</p> <p>Properties:</p> <ul> <li>Config: tenant</li> <li>Env Var: RCLONE_SWIFT_TENANT</li> <li>Type: string</li> <li>Required: false</li> </ul> <h4 id="swift-tenant-id">--swift-tenant-id</h4> <p>Tenant ID - optional for v1 auth, this or tenant required otherwise (OS_TENANT_ID).</p> <p>Properties:</p> <ul> <li>Config: tenant_id</li> <li>Env Var: RCLONE_SWIFT_TENANT_ID</li> <li>Type: string</li> <li>Required: false</li> </ul> <h4 id="swift-tenant-domain">--swift-tenant-domain</h4> <p>Tenant domain - optional (v3 auth) (OS_PROJECT_DOMAIN_NAME).</p> <p>Properties:</p> <ul> <li>Config: tenant_domain</li> <li>Env Var: RCLONE_SWIFT_TENANT_DOMAIN</li> <li>Type: string</li> <li>Required: false</li> </ul> <h4 id="swift-region">--swift-region</h4> <p>Region name - optional (OS_REGION_NAME).</p> <p>Properties:</p> <ul> <li>Config: region</li> <li>Env Var: RCLONE_SWIFT_REGION</li> <li>Type: string</li> <li>Required: false</li> </ul> <h4 id="swift-storage-url">--swift-storage-url</h4> <p>Storage URL - optional (OS_STORAGE_URL).</p> <p>Properties:</p> <ul> <li>Config: storage_url</li> <li>Env Var: RCLONE_SWIFT_STORAGE_URL</li> <li>Type: string</li> <li>Required: false</li> </ul> <h4 id="swift-auth-token">--swift-auth-token</h4> <p>Auth Token from alternate authentication - optional (OS_AUTH_TOKEN).</p> <p>Properties:</p> <ul> <li>Config: auth_token</li> <li>Env Var: RCLONE_SWIFT_AUTH_TOKEN</li> <li>Type: string</li> <li>Required: false</li> </ul> <h4 id="swift-application-credential-id">--swift-application-credential-id</h4> <p>Application Credential ID (OS_APPLICATION_CREDENTIAL_ID).</p> <p>Properties:</p> <ul> <li>Config: application_credential_id</li> <li>Env Var: RCLONE_SWIFT_APPLICATION_CREDENTIAL_ID</li> <li>Type: string</li> <li>Required: false</li> </ul> <h4 id="swift-application-credential-name">--swift-application-credential-name</h4> <p>Application Credential Name (OS_APPLICATION_CREDENTIAL_NAME).</p> <p>Properties:</p> <ul> <li>Config: application_credential_name</li> <li>Env Var: RCLONE_SWIFT_APPLICATION_CREDENTIAL_NAME</li> <li>Type: string</li> <li>Required: false</li> </ul> <h4 id="swift-application-credential-secret">--swift-application-credential-secret</h4> <p>Application Credential Secret (OS_APPLICATION_CREDENTIAL_SECRET).</p> <p>Properties:</p> <ul> <li>Config: application_credential_secret</li> <li>Env Var: RCLONE_SWIFT_APPLICATION_CREDENTIAL_SECRET</li> <li>Type: string</li> <li>Required: false</li> </ul> <h4 id="swift-auth-version">--swift-auth-version</h4> <p>AuthVersion - optional - set to (1,2,3) if your auth URL has no version (ST_AUTH_VERSION).</p> <p>Properties:</p> <ul> <li>Config: auth_version</li> <li>Env Var: RCLONE_SWIFT_AUTH_VERSION</li> <li>Type: int</li> <li>Default: 0</li> </ul> <h4 id="swift-endpoint-type">--swift-endpoint-type</h4> <p>Endpoint type to choose from the service catalogue (OS_ENDPOINT_TYPE).</p> <p>Properties:</p> <ul> <li>Config: endpoint_type</li> <li>Env Var: RCLONE_SWIFT_ENDPOINT_TYPE</li> <li>Type: string</li> <li>Default: "public"</li> <li>Examples: <ul> <li>"public" <ul> <li>Public (default, choose this if not sure)</li> </ul> </li> <li>"internal" <ul> <li>Internal (use internal service net)</li> </ul> </li> <li>"admin" <ul> <li>Admin</li> </ul> </li> </ul> </li> </ul> <h4 id="swift-storage-policy">--swift-storage-policy</h4> <p>The storage policy to use when creating a new container.</p> <p>This applies the specified storage policy when creating a new container. The policy cannot be changed afterwards. The allowed configuration values and their meaning depend on your Swift storage provider.</p> <p>Properties:</p> <ul> <li>Config: storage_policy</li> <li>Env Var: RCLONE_SWIFT_STORAGE_POLICY</li> <li>Type: string</li> <li>Required: false</li> <li>Examples: <ul> <li>"" <ul> <li>Default</li> </ul> </li> <li>"pcs" <ul> <li>OVH Public Cloud Storage</li> </ul> </li> <li>"pca" <ul> <li>OVH Public Cloud Archive</li> </ul> </li> </ul> </li> </ul> <h3 id="advanced-options">Advanced options</h3> <p>Here are the Advanced options specific to swift (OpenStack Swift (Rackspace Cloud Files, Blomp Cloud Storage, Memset Memstore, OVH)).</p> <h4 id="swift-leave-parts-on-error">--swift-leave-parts-on-error</h4> <p>If true avoid calling abort upload on a failure.</p> <p>It should be set to true for resuming uploads across different sessions.</p> <p>Properties:</p> <ul> <li>Config: leave_parts_on_error</li> <li>Env Var: RCLONE_SWIFT_LEAVE_PARTS_ON_ERROR</li> <li>Type: bool</li> <li>Default: false</li> </ul> <h4 id="swift-fetch-until-empty-page">--swift-fetch-until-empty-page</h4> <p>When paginating, always fetch unless we received an empty page.</p> <p>Consider using this option if rclone listings show fewer objects than expected, or if repeated syncs copy unchanged objects.</p> <p>It is safe to enable this, but rclone may make more API calls than necessary.</p> <p>This is one of a pair of workarounds to handle implementations of the Swift API that do not implement pagination as expected. See also "partial_page_fetch_threshold".</p> <p>Properties:</p> <ul> <li>Config: fetch_until_empty_page</li> <li>Env Var: RCLONE_SWIFT_FETCH_UNTIL_EMPTY_PAGE</li> <li>Type: bool</li> <li>Default: false</li> </ul> <h4 id="swift-partial-page-fetch-threshold">--swift-partial-page-fetch-threshold</h4> <p>When paginating, fetch if the current page is within this percentage of the limit.</p> <p>Consider using this option if rclone listings show fewer objects than expected, or if repeated syncs copy unchanged objects.</p> <p>It is safe to enable this, but rclone may make more API calls than necessary.</p> <p>This is one of a pair of workarounds to handle implementations of the Swift API that do not implement pagination as expected. See also "fetch_until_empty_page".</p> <p>Properties:</p> <ul> <li>Config: partial_page_fetch_threshold</li> <li>Env Var: RCLONE_SWIFT_PARTIAL_PAGE_FETCH_THRESHOLD</li> <li>Type: int</li> <li>Default: 0</li> </ul> <h4 id="swift-chunk-size">--swift-chunk-size</h4> <p>Above this size files will be chunked.</p> <p>Above this size files will be chunked into a a <code>_segments</code> container or a <code>.file-segments</code> directory. (See the <code>use_segments_container</code> option for more info). Default for this is 5 GiB which is its maximum value, which means only files above this size will be chunked.</p> <p>Rclone uploads chunked files as dynamic large objects (DLO).</p> <p>Properties:</p> <ul> <li>Config: chunk_size</li> <li>Env Var: RCLONE_SWIFT_CHUNK_SIZE</li> <li>Type: SizeSuffix</li> <li>Default: 5Gi</li> </ul> <h4 id="swift-no-chunk">--swift-no-chunk</h4> <p>Don't chunk files during streaming upload.</p> <p>When doing streaming uploads (e.g. using <code>rcat</code> or <code>mount</code> with <code>--vfs-cache-mode off</code>) setting this flag will cause the swift backend to not upload chunked files.</p> <p>This will limit the maximum streamed upload size to 5 GiB. This is useful because non chunked files are easier to deal with and have an MD5SUM.</p> <p>Rclone will still chunk files bigger than <code>chunk_size</code> when doing normal copy operations.</p> <p>Properties:</p> <ul> <li>Config: no_chunk</li> <li>Env Var: RCLONE_SWIFT_NO_CHUNK</li> <li>Type: bool</li> <li>Default: false</li> </ul> <h4 id="swift-no-large-objects">--swift-no-large-objects</h4> <p>Disable support for static and dynamic large objects</p> <p>Swift cannot transparently store files bigger than 5 GiB. There are two schemes for chunking large files, static large objects (SLO) or dynamic large objects (DLO), and the API does not allow rclone to determine whether a file is a static or dynamic large object without doing a HEAD on the object. Since these need to be treated differently, this means rclone has to issue HEAD requests for objects for example when reading checksums.</p> <p>When <code>no_large_objects</code> is set, rclone will assume that there are no static or dynamic large objects stored. This means it can stop doing the extra HEAD calls which in turn increases performance greatly especially when doing a swift to swift transfer with <code>--checksum</code> set.</p> <p>Setting this option implies <code>no_chunk</code> and also that no files will be uploaded in chunks, so files bigger than 5 GiB will just fail on upload.</p> <p>If you set this option and there <strong>are</strong> static or dynamic large objects, then this will give incorrect hashes for them. Downloads will succeed, but other operations such as Remove and Copy will fail.</p> <p>Properties:</p> <ul> <li>Config: no_large_objects</li> <li>Env Var: RCLONE_SWIFT_NO_LARGE_OBJECTS</li> <li>Type: bool</li> <li>Default: false</li> </ul> <h4 id="swift-use-segments-container">--swift-use-segments-container</h4> <p>Choose destination for large object segments</p> <p>Swift cannot transparently store files bigger than 5 GiB and rclone will chunk files larger than <code>chunk_size</code> (default 5 GiB) in order to upload them.</p> <p>If this value is <code>true</code> the chunks will be stored in an additional container named the same as the destination container but with <code>_segments</code> appended. This means that there won't be any duplicated data in the original container but having another container may not be acceptable.</p> <p>If this value is <code>false</code> the chunks will be stored in a <code>.file-segments</code> directory in the root of the container. This directory will be omitted when listing the container. Some providers (eg Blomp) require this mode as creating additional containers isn't allowed. If it is desired to see the <code>.file-segments</code> directory in the root then this flag must be set to <code>true</code>.</p> <p>If this value is <code>unset</code> (the default), then rclone will choose the value to use. It will be <code>false</code> unless rclone detects any <code>auth_url</code>s that it knows need it to be <code>true</code>. In this case you'll see a message in the DEBUG log.</p> <p>Properties:</p> <ul> <li>Config: use_segments_container</li> <li>Env Var: RCLONE_SWIFT_USE_SEGMENTS_CONTAINER</li> <li>Type: Tristate</li> <li>Default: unset</li> </ul> <h4 id="swift-encoding">--swift-encoding</h4> <p>The encoding for the backend.</p> <p>See the <a href="/overview/#encoding">encoding section in the overview</a> for more info.</p> <p>Properties:</p> <ul> <li>Config: encoding</li> <li>Env Var: RCLONE_SWIFT_ENCODING</li> <li>Type: Encoding</li> <li>Default: Slash,InvalidUtf8</li> </ul> <h4 id="swift-description">--swift-description</h4> <p>Description of the remote.</p> <p>Properties:</p> <ul> <li>Config: description</li> <li>Env Var: RCLONE_SWIFT_DESCRIPTION</li> <li>Type: string</li> <li>Required: false</li> </ul> <h2 id="limitations">Limitations</h2> <p>The Swift API doesn't return a correct MD5SUM for segmented files (Dynamic or Static Large Objects) so rclone won't check or use the MD5SUM for these.</p> <h2 id="troubleshooting">Troubleshooting</h2> <h3 id="rclone-gives-failed-to-create-file-system-for-remote-bad-request">Rclone gives Failed to create file system for "remote:": Bad Request</h3> <p>Due to an oddity of the underlying swift library, it gives a "Bad Request" error rather than a more sensible error when the authentication fails for Swift.</p> <p>So this most likely means your username / password is wrong. You can investigate further with the <code>--dump-bodies</code> flag.</p> <p>This may also be caused by specifying the region when you shouldn't have (e.g. OVH).</p> <h3 id="rclone-gives-failed-to-create-file-system-response-didn-t-have-storage-url-and-auth-token">Rclone gives Failed to create file system: Response didn't have storage url and auth token</h3> <p>This is most likely caused by forgetting to specify your tenant when setting up a swift remote.</p> <h2 id="ovh-cloud-archive">OVH Cloud Archive</h2> <p>To use rclone with OVH cloud archive, first use <code>rclone config</code> to set up a <code>swift</code> backend with OVH, choosing <code>pca</code> as the <code>storage_policy</code>.</p> <h3 id="uploading-objects">Uploading Objects</h3> <p>Uploading objects to OVH cloud archive is no different to object storage, you just simply run the command you like (move, copy or sync) to upload the objects. Once uploaded the objects will show in a "Frozen" state within the OVH control panel.</p> <h3 id="retrieving-objects">Retrieving Objects</h3> <p>To retrieve objects use <code>rclone copy</code> as normal. If the objects are in a frozen state then rclone will ask for them all to be unfrozen and it will wait at the end of the output with a message like the following:</p> <p><code>2019/03/23 13:06:33 NOTICE: Received retry after error - sleeping until 2019-03-23T13:16:33.481657164+01:00 (9m59.99985121s)</code></p> <p>Rclone will wait for the time specified then retry the copy.</p> </div> <div class="col-md-3"> <div class="card"> <div class="card-header" style="padding: 5px 10px;"> Contents </div> <div class="card-body"> <nav id="TableOfContents"> <ul> <li><a href="#configuration">Configuration</a> <ul> <li><a href="#configuration-from-an-openstack-credentials-file">Configuration from an OpenStack credentials file</a></li> <li><a href="#configuration-from-the-environment">Configuration from the environment</a></li> <li><a href="#using-an-alternate-authentication-method">Using an alternate authentication method</a></li> <li><a href="#fast-list">--fast-list</a></li> <li><a href="#update-and-use-server-modtime">--update and --use-server-modtime</a></li> <li><a href="#modification-times-and-hashes">Modification times and hashes</a></li> <li><a href="#restricted-filename-characters">Restricted filename characters</a></li> <li><a href="#standard-options">Standard options</a></li> <li><a href="#advanced-options">Advanced options</a></li> </ul> </li> <li><a href="#limitations">Limitations</a></li> <li><a href="#troubleshooting">Troubleshooting</a> <ul> <li><a href="#rclone-gives-failed-to-create-file-system-for-remote-bad-request">Rclone gives Failed to create file system for "remote:": Bad Request</a></li> <li><a href="#rclone-gives-failed-to-create-file-system-response-didn-t-have-storage-url-and-auth-token">Rclone gives Failed to create file system: Response didn't have storage url and auth token</a></li> </ul> </li> <li><a href="#ovh-cloud-archive">OVH Cloud Archive</a> <ul> <li><a href="#uploading-objects">Uploading Objects</a></li> <li><a href="#retrieving-objects">Retrieving Objects</a></li> </ul> </li> </ul> </nav> <p></p> </div> </div> <div class="card"> <div class="card-header" style="padding: 5px 15px;"> Platinum Sponsor </div> <div class="card-body"> <a href="https://www.backblaze.com/cloud-storage?utm_source=publisher&utm_medium=paid&utm_campaign=break-free-app-storage-q224-rclone" target="_blank" rel="noopener" title="Visit rclone's sponsor Backblaze"><img src="/img/logos/backblaze.svg"></a><br /> </div> </div> <div class="card"> <div class="card-header" style="padding: 5px 15px;"> Gold Sponsor </div> <div class="card-body"> <a href="https://www.idrive.com/e2/?refer=rclone" target="_blank" rel="noopener" title="Visit rclone's sponsor IDrive e2"><img src="/img/logos/idrive_e2.svg" viewBox="0 0 60 55"></a><br /> </div> </div> <div class="card"> <div class="card-header" style="padding: 5px 10px;"> Share and Enjoy </div> <div class="card-body"> <p class="menu"> <i class="fab fa-twitter fa-fw" aria-hidden="true"></i> <a href="https://twitter.com/intent/tweet/?text=rclone%20-%20rsync%20for%20cloud%20storage%20from%20%40njcw&url=https%3A%2F%2Frclone.org" target="_blank" rel="noopener" aria-label="Share on Twitter">Twitter</a><br /> <i class="fab fa-facebook fa-fw" aria-hidden="true"></i> <a href="https://facebook.com/sharer/sharer.php?u=https%3A%2F%2Frclone.org" target="_blank" rel="noopener" aria-label="Share on Facebook">Facebook</a><br /> <i class="fab fa-reddit fa-fw" aria-hidden="true"></i> <a href="https://reddit.com/submit/?url=https%3A%2F%2Frclone.org&resubmit=true&title=rclone%20-%20rsync%20for%20cloud%20storage" target="_blank" rel="noopener" aria-label="Share on Reddit">Reddit</a><br /> <iframe src="//ghbtns.com/github-btn.html?user=rclone&repo=rclone&type=star&count=true" allowtransparency="true" frameborder="0" scrolling="no" width="120" height="20"></iframe> </p> </div> </div> <div class="card"> <div class="card-header" style="padding: 5px 15px;"> Links </div> <div class="card-body"> <p class="menu"> <i class="fa fa-comments fa-fw" aria-hidden="true"></i> <a href="https://forum.rclone.org">Rclone forum</a><br /> <i class="fab fa-github fa-fw" aria-hidden="true"></i> <a href="https://github.com/rclone/rclone">GitHub project</a><br /> <i class="fa fa-book fa-fw" aria-hidden="true"></i> <a href="https://github.com/rclone/rclone/wiki">Rclone Wiki</a><br /> <i class="fa fa-heart heart fa-fw" aria-hidden="true"></i> <a href="/sponsor/">Sponsor</a><br /> <i class="fab fa-twitter fa-fw" aria-hidden="true"></i> <a href="https://twitter.com/njcw">@njcw</a> </p> </div> </div> </div> </div> <footer> <div class="row"> <div class="col-md-10"> <div class="card card-body"> <p style="font-size: 90%;"> © <a href="https://www.craig-wood.com/nick/" target="blank">Nick Craig-Wood</a> 2014-2024<br> Source file <a href="https://github.com/rclone/rclone/blob/master/docs/content/swift.md" target="blank">swift.md</a> last updated <a href="https://github.com/rclone/rclone/commit/49f69196c2aa8396734955d6ff2ad986b352e960">2024-09-08</a><br> Uploaded with <a href="https://rclone.org">rclone</a>. Built with <a href="https://gohugo.io/" target="blank">Hugo</a>. Logo by <a href="https://twitter.com/andy23" target="blank">@andy23</a>. Served by <a href="https://caddyserver.com/" target="blank">Caddy</a>. Hosted at <a href="https://hetzner.cloud/?ref=62WcciVmlzHt" title="Get €20 in cloud credits" target="blank">Hetzner Cloud</a>. </p> </div> </div> </div> </footer> </div> <script src="/js/jquery.min.3.5.1.js"></script> <script src="/js/popper.min.1.16.0.js"></script> <script src="/js/bootstrap.min.4.4.1.js"></script> <script src="/js/custom.js?r=-62135596800"></script> <script src="/js/search.js?r=-62135596800"></script> </body> </html>