forked from TrueCloudLab/rclone
Compare commits
23 commits
master
...
v1.60-stab
Author | SHA1 | Date | |
---|---|---|---|
|
ab8be2663f | ||
|
9e2aaa0f67 | ||
|
f8997b8336 | ||
|
567d8fc8d1 | ||
|
4ffe9dcfef | ||
|
6d0824954b | ||
|
1a5160c7aa | ||
|
5012f78c45 | ||
|
8f3741419f | ||
|
91afa14d28 | ||
|
4038c2c316 | ||
|
ed7c286ef6 | ||
|
0866a7b6e2 | ||
|
ac38744e69 | ||
|
dfc21a5b9e | ||
|
ff408f5309 | ||
|
e2d2a05361 | ||
|
e8002c66a9 | ||
|
6f207668c2 | ||
|
a2491719a1 | ||
|
29e1c68ee0 | ||
|
05040cc504 | ||
|
6944f28dc2 |
26 changed files with 1473 additions and 641 deletions
141
MANUAL.html
generated
141
MANUAL.html
generated
|
@ -19,7 +19,7 @@
|
||||||
<header id="title-block-header">
|
<header id="title-block-header">
|
||||||
<h1 class="title">rclone(1) User Manual</h1>
|
<h1 class="title">rclone(1) User Manual</h1>
|
||||||
<p class="author">Nick Craig-Wood</p>
|
<p class="author">Nick Craig-Wood</p>
|
||||||
<p class="date">Oct 21, 2022</p>
|
<p class="date">Nov 17, 2022</p>
|
||||||
</header>
|
</header>
|
||||||
<h1 id="rclone-syncs-your-files-to-cloud-storage">Rclone syncs your files to cloud storage</h1>
|
<h1 id="rclone-syncs-your-files-to-cloud-storage">Rclone syncs your files to cloud storage</h1>
|
||||||
<p><img width="50%" src="https://rclone.org/img/logo_on_light__horizontal_color.svg" alt="rclone logo" style="float:right; padding: 5px;" ></p>
|
<p><img width="50%" src="https://rclone.org/img/logo_on_light__horizontal_color.svg" alt="rclone logo" style="float:right; padding: 5px;" ></p>
|
||||||
|
@ -227,9 +227,9 @@ macOS cannot verify that this app is free from malware.</code></pre>
|
||||||
<h3 id="windows-precompiled">Precompiled binary</h3>
|
<h3 id="windows-precompiled">Precompiled binary</h3>
|
||||||
<p>Fetch the correct binary for your processor type by clicking on these links. If not sure, use the first link.</p>
|
<p>Fetch the correct binary for your processor type by clicking on these links. If not sure, use the first link.</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="https://downloads.rclone.org/rclone-current-linux-amd64.zip">Intel/AMD - 64 Bit</a></li>
|
<li><a href="https://downloads.rclone.org/rclone-current-windows-amd64.zip">Intel/AMD - 64 Bit</a></li>
|
||||||
<li><a href="https://downloads.rclone.org/rclone-current-linux-386.zip">Intel/AMD - 32 Bit</a></li>
|
<li><a href="https://downloads.rclone.org/rclone-current-windows-386.zip">Intel/AMD - 32 Bit</a></li>
|
||||||
<li><a href="https://downloads.rclone.org/rclone-current-linux-arm64.zip">ARM - 64 Bit</a></li>
|
<li><a href="https://downloads.rclone.org/rclone-current-windows-arm64.zip">ARM - 64 Bit</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>Open this file in the Explorer and extract <code>rclone.exe</code>. Rclone is a portable executable so you can place it wherever is convenient.</p>
|
<p>Open this file in the Explorer and extract <code>rclone.exe</code>. Rclone is a portable executable so you can place it wherever is convenient.</p>
|
||||||
<p>Open a CMD window (or powershell) and run the binary. Note that rclone does not launch a GUI by default, it runs in the CMD Window.</p>
|
<p>Open a CMD window (or powershell) and run the binary. Note that rclone does not launch a GUI by default, it runs in the CMD Window.</p>
|
||||||
|
@ -8081,13 +8081,13 @@ Showing nodes accounting for 1537.03kB, 100% of 1537.03kB total
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="odd">
|
<tr class="odd">
|
||||||
<td>Oracle Object Storage</td>
|
<td>Oracle Object Storage</td>
|
||||||
<td style="text-align: center;">Yes</td>
|
<td style="text-align: center;">No</td>
|
||||||
<td style="text-align: center;">Yes</td>
|
<td style="text-align: center;">Yes</td>
|
||||||
<td style="text-align: center;">No</td>
|
<td style="text-align: center;">No</td>
|
||||||
<td style="text-align: center;">No</td>
|
<td style="text-align: center;">No</td>
|
||||||
<td style="text-align: center;">Yes</td>
|
<td style="text-align: center;">Yes</td>
|
||||||
<td style="text-align: center;">Yes</td>
|
<td style="text-align: center;">Yes</td>
|
||||||
<td style="text-align: center;">No</td>
|
<td style="text-align: center;">Yes</td>
|
||||||
<td style="text-align: center;">No</td>
|
<td style="text-align: center;">No</td>
|
||||||
<td style="text-align: center;">No</td>
|
<td style="text-align: center;">No</td>
|
||||||
<td style="text-align: center;">No</td>
|
<td style="text-align: center;">No</td>
|
||||||
|
@ -8471,7 +8471,7 @@ Showing nodes accounting for 1537.03kB, 100% of 1537.03kB total
|
||||||
--use-json-log Use json log format
|
--use-json-log Use json log format
|
||||||
--use-mmap Use mmap allocator (see docs)
|
--use-mmap Use mmap allocator (see docs)
|
||||||
--use-server-modtime Use server modified time instead of object metadata
|
--use-server-modtime Use server modified time instead of object metadata
|
||||||
--user-agent string Set the user-agent to a specified string (default "rclone/v1.60.0")
|
--user-agent string Set the user-agent to a specified string (default "rclone/v1.60.1")
|
||||||
-v, --verbose count Print lots more stuff (repeat for more)</code></pre>
|
-v, --verbose count Print lots more stuff (repeat for more)</code></pre>
|
||||||
<h2 id="backend-flags">Backend Flags</h2>
|
<h2 id="backend-flags">Backend Flags</h2>
|
||||||
<p>These flags are available for every command. They control the backends and may be set in the config file.</p>
|
<p>These flags are available for every command. They control the backends and may be set in the config file.</p>
|
||||||
|
@ -8848,6 +8848,7 @@ Showing nodes accounting for 1537.03kB, 100% of 1537.03kB total
|
||||||
--s3-max-upload-parts int Maximum number of parts in a multipart upload (default 10000)
|
--s3-max-upload-parts int Maximum number of parts in a multipart upload (default 10000)
|
||||||
--s3-memory-pool-flush-time Duration How often internal memory buffer pools will be flushed (default 1m0s)
|
--s3-memory-pool-flush-time Duration How often internal memory buffer pools will be flushed (default 1m0s)
|
||||||
--s3-memory-pool-use-mmap Whether to use mmap buffers in internal memory pool
|
--s3-memory-pool-use-mmap Whether to use mmap buffers in internal memory pool
|
||||||
|
--s3-might-gzip Tristate Set this if the backend might gzip objects (default unset)
|
||||||
--s3-no-check-bucket If set, don't attempt to check the bucket exists or create it
|
--s3-no-check-bucket If set, don't attempt to check the bucket exists or create it
|
||||||
--s3-no-head If set, don't HEAD uploaded objects to check integrity
|
--s3-no-head If set, don't HEAD uploaded objects to check integrity
|
||||||
--s3-no-head-object If set, do not do HEAD before GET when getting objects
|
--s3-no-head-object If set, do not do HEAD before GET when getting objects
|
||||||
|
@ -12315,15 +12316,39 @@ $ rclone -q --s3-versions ls s3:cleanup-test
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li>"s3.wasabisys.com"
|
<li>"s3.wasabisys.com"
|
||||||
<ul>
|
<ul>
|
||||||
<li>Wasabi US East endpoint</li>
|
<li>Wasabi US East 1 (N. Virginia)</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>"s3.us-east-2.wasabisys.com"
|
||||||
|
<ul>
|
||||||
|
<li>Wasabi US East 2 (N. Virginia)</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>"s3.us-central-1.wasabisys.com"
|
||||||
|
<ul>
|
||||||
|
<li>Wasabi US Central 1 (Texas)</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li>"s3.us-west-1.wasabisys.com"
|
<li>"s3.us-west-1.wasabisys.com"
|
||||||
<ul>
|
<ul>
|
||||||
<li>Wasabi US West endpoint</li>
|
<li>Wasabi US West 1 (Oregon)</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>"s3.ca-central-1.wasabisys.com"
|
||||||
|
<ul>
|
||||||
|
<li>Wasabi CA Central 1 (Toronto)</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li>"s3.eu-central-1.wasabisys.com"
|
<li>"s3.eu-central-1.wasabisys.com"
|
||||||
<ul>
|
<ul>
|
||||||
<li>Wasabi EU Central endpoint</li>
|
<li>Wasabi EU Central 1 (Amsterdam)</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>"s3.eu-central-2.wasabisys.com"
|
||||||
|
<ul>
|
||||||
|
<li>Wasabi EU Central 2 (Frankfurt)</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>"s3.eu-west-1.wasabisys.com"
|
||||||
|
<ul>
|
||||||
|
<li>Wasabi EU West 1 (London)</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>"s3.eu-west-2.wasabisys.com"
|
||||||
|
<ul>
|
||||||
|
<li>Wasabi EU West 2 (Paris)</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
<li>"s3.ap-northeast-1.wasabisys.com"
|
<li>"s3.ap-northeast-1.wasabisys.com"
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -12333,6 +12358,14 @@ $ rclone -q --s3-versions ls s3:cleanup-test
|
||||||
<ul>
|
<ul>
|
||||||
<li>Wasabi AP Northeast 2 (Osaka) endpoint</li>
|
<li>Wasabi AP Northeast 2 (Osaka) endpoint</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
|
<li>"s3.ap-southeast-1.wasabisys.com"
|
||||||
|
<ul>
|
||||||
|
<li>Wasabi AP Southeast 1 (Singapore)</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>"s3.ap-southeast-2.wasabisys.com"
|
||||||
|
<ul>
|
||||||
|
<li>Wasabi AP Southeast 2 (Sydney)</li>
|
||||||
|
</ul></li>
|
||||||
<li>"s3.ir-thr-at1.arvanstorage.com"
|
<li>"s3.ir-thr-at1.arvanstorage.com"
|
||||||
<ul>
|
<ul>
|
||||||
<li>ArvanCloud Tehran Iran (Asiatech) endpoint</li>
|
<li>ArvanCloud Tehran Iran (Asiatech) endpoint</li>
|
||||||
|
@ -13673,6 +13706,21 @@ Windows: "%USERPROFILE%\.aws\credentials"</code></pre>
|
||||||
<li>Type: bool</li>
|
<li>Type: bool</li>
|
||||||
<li>Default: false</li>
|
<li>Default: false</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<h4 id="s3-might-gzip">--s3-might-gzip</h4>
|
||||||
|
<p>Set this if the backend might gzip objects.</p>
|
||||||
|
<p>Normally providers will not alter objects when they are downloaded. If an object was not uploaded with <code>Content-Encoding: gzip</code> then it won't be set on download.</p>
|
||||||
|
<p>However some providers may gzip objects even if they weren't uploaded with <code>Content-Encoding: gzip</code> (eg Cloudflare).</p>
|
||||||
|
<p>A symptom of this would be receiving errors like</p>
|
||||||
|
<pre><code>ERROR corrupted on transfer: sizes differ NNN vs MMM</code></pre>
|
||||||
|
<p>If you set this flag and rclone downloads an object with Content-Encoding: gzip set and chunked transfer encoding, then rclone will decompress the object on the fly.</p>
|
||||||
|
<p>If this is set to unset (the default) then rclone will choose according to the provider setting what to apply, but you can override rclone's choice here.</p>
|
||||||
|
<p>Properties:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Config: might_gzip</li>
|
||||||
|
<li>Env Var: RCLONE_S3_MIGHT_GZIP</li>
|
||||||
|
<li>Type: Tristate</li>
|
||||||
|
<li>Default: unset</li>
|
||||||
|
</ul>
|
||||||
<h4 id="s3-no-system-metadata">--s3-no-system-metadata</h4>
|
<h4 id="s3-no-system-metadata">--s3-no-system-metadata</h4>
|
||||||
<p>Suppress setting and reading of system metadata</p>
|
<p>Suppress setting and reading of system metadata</p>
|
||||||
<p>Properties:</p>
|
<p>Properties:</p>
|
||||||
|
@ -22458,7 +22506,17 @@ y/e/d> y</code></pre>
|
||||||
<li>If a particular file is already present in storage, one can quickly submit file hash instead of long file upload (this optimization is supported by rclone)</li>
|
<li>If a particular file is already present in storage, one can quickly submit file hash instead of long file upload (this optimization is supported by rclone)</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h2 id="configuration-24">Configuration</h2>
|
<h2 id="configuration-24">Configuration</h2>
|
||||||
<p>Here is an example of making a mailru configuration. First create a Mail.ru Cloud account and choose a tariff, then run</p>
|
<p>Here is an example of making a mailru configuration.</p>
|
||||||
|
<p>First create a Mail.ru Cloud account and choose a tariff.</p>
|
||||||
|
<p>You will need to log in and create an app password for rclone. Rclone <strong>will not work</strong> with your normal username and password - it will give an error like <code>oauth2: server response missing access_token</code>.</p>
|
||||||
|
<ul>
|
||||||
|
<li>Click on your user icon in the top right</li>
|
||||||
|
<li>Go to Security / "Пароль и безопасность"</li>
|
||||||
|
<li>Click password for apps / "Пароли для внешних приложений"</li>
|
||||||
|
<li>Add the password - give it a name - eg "rclone"</li>
|
||||||
|
<li>Copy the password and use this password below - your normal login password won't work.</li>
|
||||||
|
</ul>
|
||||||
|
<p>Now run</p>
|
||||||
<pre><code>rclone config</code></pre>
|
<pre><code>rclone config</code></pre>
|
||||||
<p>This will guide you through an interactive setup process:</p>
|
<p>This will guide you through an interactive setup process:</p>
|
||||||
<pre><code>No remotes found, make a new one?
|
<pre><code>No remotes found, make a new one?
|
||||||
|
@ -22480,6 +22538,10 @@ User name (usually email)
|
||||||
Enter a string value. Press Enter for the default ("").
|
Enter a string value. Press Enter for the default ("").
|
||||||
user> username@mail.ru
|
user> username@mail.ru
|
||||||
Password
|
Password
|
||||||
|
|
||||||
|
This must be an app password - rclone will not work with your normal
|
||||||
|
password. See the Configuration section in the docs for how to make an
|
||||||
|
app password.
|
||||||
y) Yes type in my own password
|
y) Yes type in my own password
|
||||||
g) Generate random password
|
g) Generate random password
|
||||||
y/g> y
|
y/g> y
|
||||||
|
@ -22598,6 +22660,7 @@ y/e/d> y</code></pre>
|
||||||
</ul>
|
</ul>
|
||||||
<h4 id="mailru-pass">--mailru-pass</h4>
|
<h4 id="mailru-pass">--mailru-pass</h4>
|
||||||
<p>Password.</p>
|
<p>Password.</p>
|
||||||
|
<p>This must be an app password - rclone will not work with your normal password. See the Configuration section in the docs for how to make an app password.</p>
|
||||||
<p><strong>NB</strong> Input to this must be obscured - see <a href="https://rclone.org/commands/rclone_obscure/">rclone obscure</a>.</p>
|
<p><strong>NB</strong> Input to this must be obscured - see <a href="https://rclone.org/commands/rclone_obscure/">rclone obscure</a>.</p>
|
||||||
<p>Properties:</p>
|
<p>Properties:</p>
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -28967,6 +29030,55 @@ $ tree /tmp/b
|
||||||
<li>"error": return an error based on option value</li>
|
<li>"error": return an error based on option value</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h1 id="changelog">Changelog</h1>
|
<h1 id="changelog">Changelog</h1>
|
||||||
|
<h2 id="v1.60.1---2022-11-17">v1.60.1 - 2022-11-17</h2>
|
||||||
|
<p><a href="https://github.com/rclone/rclone/compare/v1.60.0...v1.60.1">See commits</a></p>
|
||||||
|
<ul>
|
||||||
|
<li>Bug Fixes
|
||||||
|
<ul>
|
||||||
|
<li>lib/cache: Fix alias backend shutting down too soon (Nick Craig-Wood)</li>
|
||||||
|
<li>wasm: Fix walltime link error by adding up-to-date wasm_exec.js (João Henrique Franco)</li>
|
||||||
|
<li>docs
|
||||||
|
<ul>
|
||||||
|
<li>Update faq.md with bisync (Samuel Johnson)</li>
|
||||||
|
<li>Corrected download links in windows install docs (coultonluke)</li>
|
||||||
|
<li>Add direct download link for windows arm64 (albertony)</li>
|
||||||
|
<li>Remove link to rclone slack as it is no longer supported (Nick Craig-Wood)</li>
|
||||||
|
<li>Faq: how to use a proxy server that requires a username and password (asdffdsazqqq)</li>
|
||||||
|
<li>Oracle-object-storage: doc fix (Manoj Ghosh)</li>
|
||||||
|
<li>Fix typo <code>remove</code> in rclone_serve_restic command (Joda Stößer)</li>
|
||||||
|
<li>Fix character that was incorrectly interpreted as markdown (Clément Notin)</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul></li>
|
||||||
|
<li>VFS
|
||||||
|
<ul>
|
||||||
|
<li>Fix deadlock caused by cache cleaner and upload finishing (Nick Craig-Wood)</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>Local
|
||||||
|
<ul>
|
||||||
|
<li>Clean absolute paths (albertony)</li>
|
||||||
|
<li>Fix -L/--copy-links with filters missing directories (Nick Craig-Wood)</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>Mailru
|
||||||
|
<ul>
|
||||||
|
<li>Note that an app password is now needed (Nick Craig-Wood)</li>
|
||||||
|
<li>Allow timestamps to be before the epoch 1970-01-01 (Nick Craig-Wood)</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>S3
|
||||||
|
<ul>
|
||||||
|
<li>Add provider quirk <code>--s3-might-gzip</code> to fix corrupted on transfer: sizes differ (Nick Craig-Wood)</li>
|
||||||
|
<li>Allow Storj to server side copy since it seems to work now (Nick Craig-Wood)</li>
|
||||||
|
<li>Fix for unchecked err value in s3 listv2 (Aaron Gokaslan)</li>
|
||||||
|
<li>Add additional Wasabi locations (techknowlogick)</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>Smb
|
||||||
|
<ul>
|
||||||
|
<li>Fix <code>Failed to sync: context canceled</code> at the end of syncs (Nick Craig-Wood)</li>
|
||||||
|
</ul></li>
|
||||||
|
<li>WebDAV
|
||||||
|
<ul>
|
||||||
|
<li>Fix Move/Copy/DirMove when using -server-side-across-configs (Nick Craig-Wood)</li>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
<h2 id="v1.60.0---2022-10-21">v1.60.0 - 2022-10-21</h2>
|
<h2 id="v1.60.0---2022-10-21">v1.60.0 - 2022-10-21</h2>
|
||||||
<p><a href="https://github.com/rclone/rclone/compare/v1.59.0...v1.60.0">See commits</a></p>
|
<p><a href="https://github.com/rclone/rclone/compare/v1.59.0...v1.60.0">See commits</a></p>
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -35170,7 +35282,7 @@ Server B> rclone copy /tmp/whatever remote:Backup</code></pre>
|
||||||
<p>It would be possible to make a sync system which stored binary diffs instead of whole objects like rclone does, but that would break the 1:1 mapping of files on your hard disk to objects in the remote cloud storage system.</p>
|
<p>It would be possible to make a sync system which stored binary diffs instead of whole objects like rclone does, but that would break the 1:1 mapping of files on your hard disk to objects in the remote cloud storage system.</p>
|
||||||
<p>All the cloud storage systems support partial downloads of content, so it would be possible to make partial downloads work. However to make this work efficiently this would require storing a significant amount of metadata, which breaks the desired 1:1 mapping of files to objects.</p>
|
<p>All the cloud storage systems support partial downloads of content, so it would be possible to make partial downloads work. However to make this work efficiently this would require storing a significant amount of metadata, which breaks the desired 1:1 mapping of files to objects.</p>
|
||||||
<h3 id="can-rclone-do-bi-directional-sync">Can rclone do bi-directional sync?</h3>
|
<h3 id="can-rclone-do-bi-directional-sync">Can rclone do bi-directional sync?</h3>
|
||||||
<p>No, not at present. rclone only does uni-directional sync from A -> B. It may do in the future though since it has all the primitives - it just requires writing the algorithm to do it.</p>
|
<p>Yes, since rclone v1.58.0, <a href="https://rclone.org/bisync/">bidirectional cloud sync</a> is available.</p>
|
||||||
<h3 id="can-i-use-rclone-with-an-http-proxy">Can I use rclone with an HTTP proxy?</h3>
|
<h3 id="can-i-use-rclone-with-an-http-proxy">Can I use rclone with an HTTP proxy?</h3>
|
||||||
<p>Yes. rclone will follow the standard environment variables for proxies, similar to cURL and other programs.</p>
|
<p>Yes. rclone will follow the standard environment variables for proxies, similar to cURL and other programs.</p>
|
||||||
<p>In general the variables are called <code>http_proxy</code> (for services reached over <code>http</code>) and <code>https_proxy</code> (for services reached over <code>https</code>). Most public services will be using <code>https</code>, but you may wish to set both.</p>
|
<p>In general the variables are called <code>http_proxy</code> (for services reached over <code>http</code>) and <code>https_proxy</code> (for services reached over <code>https</code>). Most public services will be using <code>https</code>, but you may wish to set both.</p>
|
||||||
|
@ -35180,6 +35292,11 @@ Server B> rclone copy /tmp/whatever remote:Backup</code></pre>
|
||||||
export https_proxy=$http_proxy
|
export https_proxy=$http_proxy
|
||||||
export HTTP_PROXY=$http_proxy
|
export HTTP_PROXY=$http_proxy
|
||||||
export HTTPS_PROXY=$http_proxy</code></pre>
|
export HTTPS_PROXY=$http_proxy</code></pre>
|
||||||
|
<p>Note: If the proxy server requires a username and password, then use</p>
|
||||||
|
<pre><code>export http_proxy=http://username:password@proxyserver:12345
|
||||||
|
export https_proxy=$http_proxy
|
||||||
|
export HTTP_PROXY=$http_proxy
|
||||||
|
export HTTPS_PROXY=$http_proxy</code></pre>
|
||||||
<p>The <code>NO_PROXY</code> allows you to disable the proxy for specific hosts. Hosts must be comma separated, and can contain domains or parts. For instance "foo.com" also matches "bar.foo.com".</p>
|
<p>The <code>NO_PROXY</code> allows you to disable the proxy for specific hosts. Hosts must be comma separated, and can contain domains or parts. For instance "foo.com" also matches "bar.foo.com".</p>
|
||||||
<p>e.g.</p>
|
<p>e.g.</p>
|
||||||
<pre><code>export no_proxy=localhost,127.0.0.0/8,my.host.name
|
<pre><code>export no_proxy=localhost,127.0.0.0/8,my.host.name
|
||||||
|
|
139
MANUAL.md
generated
139
MANUAL.md
generated
|
@ -1,6 +1,6 @@
|
||||||
% rclone(1) User Manual
|
% rclone(1) User Manual
|
||||||
% Nick Craig-Wood
|
% Nick Craig-Wood
|
||||||
% Oct 21, 2022
|
% Nov 17, 2022
|
||||||
|
|
||||||
# Rclone syncs your files to cloud storage
|
# Rclone syncs your files to cloud storage
|
||||||
|
|
||||||
|
@ -315,9 +315,9 @@ The simplest fix is to run
|
||||||
Fetch the correct binary for your processor type by clicking on these
|
Fetch the correct binary for your processor type by clicking on these
|
||||||
links. If not sure, use the first link.
|
links. If not sure, use the first link.
|
||||||
|
|
||||||
- [Intel/AMD - 64 Bit](https://downloads.rclone.org/rclone-current-linux-amd64.zip)
|
- [Intel/AMD - 64 Bit](https://downloads.rclone.org/rclone-current-windows-amd64.zip)
|
||||||
- [Intel/AMD - 32 Bit](https://downloads.rclone.org/rclone-current-linux-386.zip)
|
- [Intel/AMD - 32 Bit](https://downloads.rclone.org/rclone-current-windows-386.zip)
|
||||||
- [ARM - 64 Bit](https://downloads.rclone.org/rclone-current-linux-arm64.zip)
|
- [ARM - 64 Bit](https://downloads.rclone.org/rclone-current-windows-arm64.zip)
|
||||||
|
|
||||||
Open this file in the Explorer and extract `rclone.exe`. Rclone is a
|
Open this file in the Explorer and extract `rclone.exe`. Rclone is a
|
||||||
portable executable so you can place it wherever is convenient.
|
portable executable so you can place it wherever is convenient.
|
||||||
|
@ -14241,7 +14241,7 @@ upon backend-specific capabilities.
|
||||||
| Microsoft OneDrive | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes |
|
| Microsoft OneDrive | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes |
|
||||||
| OpenDrive | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes |
|
| OpenDrive | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes |
|
||||||
| OpenStack Swift | Yes † | Yes | No | No | No | Yes | Yes | No | Yes | No |
|
| OpenStack Swift | Yes † | Yes | No | No | No | Yes | Yes | No | Yes | No |
|
||||||
| Oracle Object Storage | Yes | Yes | No | No | Yes | Yes | No | No | No | No |
|
| Oracle Object Storage | No | Yes | No | No | Yes | Yes | Yes | No | No | No |
|
||||||
| pCloud | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes |
|
| pCloud | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes |
|
||||||
| premiumize.me | Yes | No | Yes | Yes | No | No | No | Yes | Yes | Yes |
|
| premiumize.me | Yes | No | Yes | Yes | No | No | No | Yes | Yes | Yes |
|
||||||
| put.io | Yes | No | Yes | Yes | Yes | No | Yes | No | Yes | Yes |
|
| put.io | Yes | No | Yes | Yes | Yes | No | Yes | No | Yes | Yes |
|
||||||
|
@ -14501,7 +14501,7 @@ These flags are available for every command.
|
||||||
--use-json-log Use json log format
|
--use-json-log Use json log format
|
||||||
--use-mmap Use mmap allocator (see docs)
|
--use-mmap Use mmap allocator (see docs)
|
||||||
--use-server-modtime Use server modified time instead of object metadata
|
--use-server-modtime Use server modified time instead of object metadata
|
||||||
--user-agent string Set the user-agent to a specified string (default "rclone/v1.60.0")
|
--user-agent string Set the user-agent to a specified string (default "rclone/v1.60.1")
|
||||||
-v, --verbose count Print lots more stuff (repeat for more)
|
-v, --verbose count Print lots more stuff (repeat for more)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -14884,6 +14884,7 @@ and may be set in the config file.
|
||||||
--s3-max-upload-parts int Maximum number of parts in a multipart upload (default 10000)
|
--s3-max-upload-parts int Maximum number of parts in a multipart upload (default 10000)
|
||||||
--s3-memory-pool-flush-time Duration How often internal memory buffer pools will be flushed (default 1m0s)
|
--s3-memory-pool-flush-time Duration How often internal memory buffer pools will be flushed (default 1m0s)
|
||||||
--s3-memory-pool-use-mmap Whether to use mmap buffers in internal memory pool
|
--s3-memory-pool-use-mmap Whether to use mmap buffers in internal memory pool
|
||||||
|
--s3-might-gzip Tristate Set this if the backend might gzip objects (default unset)
|
||||||
--s3-no-check-bucket If set, don't attempt to check the bucket exists or create it
|
--s3-no-check-bucket If set, don't attempt to check the bucket exists or create it
|
||||||
--s3-no-head If set, don't HEAD uploaded objects to check integrity
|
--s3-no-head If set, don't HEAD uploaded objects to check integrity
|
||||||
--s3-no-head-object If set, do not do HEAD before GET when getting objects
|
--s3-no-head-object If set, do not do HEAD before GET when getting objects
|
||||||
|
@ -18940,15 +18941,31 @@ Properties:
|
||||||
- "s3.ap-southeast-1.lyvecloud.seagate.com"
|
- "s3.ap-southeast-1.lyvecloud.seagate.com"
|
||||||
- Seagate Lyve Cloud AP Southeast 1 (Singapore)
|
- Seagate Lyve Cloud AP Southeast 1 (Singapore)
|
||||||
- "s3.wasabisys.com"
|
- "s3.wasabisys.com"
|
||||||
- Wasabi US East endpoint
|
- Wasabi US East 1 (N. Virginia)
|
||||||
|
- "s3.us-east-2.wasabisys.com"
|
||||||
|
- Wasabi US East 2 (N. Virginia)
|
||||||
|
- "s3.us-central-1.wasabisys.com"
|
||||||
|
- Wasabi US Central 1 (Texas)
|
||||||
- "s3.us-west-1.wasabisys.com"
|
- "s3.us-west-1.wasabisys.com"
|
||||||
- Wasabi US West endpoint
|
- Wasabi US West 1 (Oregon)
|
||||||
|
- "s3.ca-central-1.wasabisys.com"
|
||||||
|
- Wasabi CA Central 1 (Toronto)
|
||||||
- "s3.eu-central-1.wasabisys.com"
|
- "s3.eu-central-1.wasabisys.com"
|
||||||
- Wasabi EU Central endpoint
|
- Wasabi EU Central 1 (Amsterdam)
|
||||||
|
- "s3.eu-central-2.wasabisys.com"
|
||||||
|
- Wasabi EU Central 2 (Frankfurt)
|
||||||
|
- "s3.eu-west-1.wasabisys.com"
|
||||||
|
- Wasabi EU West 1 (London)
|
||||||
|
- "s3.eu-west-2.wasabisys.com"
|
||||||
|
- Wasabi EU West 2 (Paris)
|
||||||
- "s3.ap-northeast-1.wasabisys.com"
|
- "s3.ap-northeast-1.wasabisys.com"
|
||||||
- Wasabi AP Northeast 1 (Tokyo) endpoint
|
- Wasabi AP Northeast 1 (Tokyo) endpoint
|
||||||
- "s3.ap-northeast-2.wasabisys.com"
|
- "s3.ap-northeast-2.wasabisys.com"
|
||||||
- Wasabi AP Northeast 2 (Osaka) endpoint
|
- Wasabi AP Northeast 2 (Osaka) endpoint
|
||||||
|
- "s3.ap-southeast-1.wasabisys.com"
|
||||||
|
- Wasabi AP Southeast 1 (Singapore)
|
||||||
|
- "s3.ap-southeast-2.wasabisys.com"
|
||||||
|
- Wasabi AP Southeast 2 (Sydney)
|
||||||
- "s3.ir-thr-at1.arvanstorage.com"
|
- "s3.ir-thr-at1.arvanstorage.com"
|
||||||
- ArvanCloud Tehran Iran (Asiatech) endpoint
|
- ArvanCloud Tehran Iran (Asiatech) endpoint
|
||||||
|
|
||||||
|
@ -20167,6 +20184,37 @@ Properties:
|
||||||
- Type: bool
|
- Type: bool
|
||||||
- Default: false
|
- Default: false
|
||||||
|
|
||||||
|
#### --s3-might-gzip
|
||||||
|
|
||||||
|
Set this if the backend might gzip objects.
|
||||||
|
|
||||||
|
Normally providers will not alter objects when they are downloaded. If
|
||||||
|
an object was not uploaded with `Content-Encoding: gzip` then it won't
|
||||||
|
be set on download.
|
||||||
|
|
||||||
|
However some providers may gzip objects even if they weren't uploaded
|
||||||
|
with `Content-Encoding: gzip` (eg Cloudflare).
|
||||||
|
|
||||||
|
A symptom of this would be receiving errors like
|
||||||
|
|
||||||
|
ERROR corrupted on transfer: sizes differ NNN vs MMM
|
||||||
|
|
||||||
|
If you set this flag and rclone downloads an object with
|
||||||
|
Content-Encoding: gzip set and chunked transfer encoding, then rclone
|
||||||
|
will decompress the object on the fly.
|
||||||
|
|
||||||
|
If this is set to unset (the default) then rclone will choose
|
||||||
|
according to the provider setting what to apply, but you can override
|
||||||
|
rclone's choice here.
|
||||||
|
|
||||||
|
|
||||||
|
Properties:
|
||||||
|
|
||||||
|
- Config: might_gzip
|
||||||
|
- Env Var: RCLONE_S3_MIGHT_GZIP
|
||||||
|
- Type: Tristate
|
||||||
|
- Default: unset
|
||||||
|
|
||||||
#### --s3-no-system-metadata
|
#### --s3-no-system-metadata
|
||||||
|
|
||||||
Suppress setting and reading of system metadata
|
Suppress setting and reading of system metadata
|
||||||
|
@ -32271,8 +32319,21 @@ Currently it is recommended to disable 2FA on Mail.ru accounts intended for rclo
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
Here is an example of making a mailru configuration. First create a Mail.ru Cloud
|
Here is an example of making a mailru configuration.
|
||||||
account and choose a tariff, then run
|
|
||||||
|
First create a Mail.ru Cloud account and choose a tariff.
|
||||||
|
|
||||||
|
You will need to log in and create an app password for rclone. Rclone
|
||||||
|
**will not work** with your normal username and password - it will
|
||||||
|
give an error like `oauth2: server response missing access_token`.
|
||||||
|
|
||||||
|
- Click on your user icon in the top right
|
||||||
|
- Go to Security / "Пароль и безопасность"
|
||||||
|
- Click password for apps / "Пароли для внешних приложений"
|
||||||
|
- Add the password - give it a name - eg "rclone"
|
||||||
|
- Copy the password and use this password below - your normal login password won't work.
|
||||||
|
|
||||||
|
Now run
|
||||||
|
|
||||||
rclone config
|
rclone config
|
||||||
|
|
||||||
|
@ -32298,6 +32359,10 @@ User name (usually email)
|
||||||
Enter a string value. Press Enter for the default ("").
|
Enter a string value. Press Enter for the default ("").
|
||||||
user> username@mail.ru
|
user> username@mail.ru
|
||||||
Password
|
Password
|
||||||
|
|
||||||
|
This must be an app password - rclone will not work with your normal
|
||||||
|
password. See the Configuration section in the docs for how to make an
|
||||||
|
app password.
|
||||||
y) Yes type in my own password
|
y) Yes type in my own password
|
||||||
g) Generate random password
|
g) Generate random password
|
||||||
y/g> y
|
y/g> y
|
||||||
|
@ -32420,6 +32485,11 @@ Properties:
|
||||||
|
|
||||||
Password.
|
Password.
|
||||||
|
|
||||||
|
This must be an app password - rclone will not work with your normal
|
||||||
|
password. See the Configuration section in the docs for how to make an
|
||||||
|
app password.
|
||||||
|
|
||||||
|
|
||||||
**NB** Input to this must be obscured - see [rclone obscure](https://rclone.org/commands/rclone_obscure/).
|
**NB** Input to this must be obscured - see [rclone obscure](https://rclone.org/commands/rclone_obscure/).
|
||||||
|
|
||||||
Properties:
|
Properties:
|
||||||
|
@ -40954,6 +41024,40 @@ Options:
|
||||||
|
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v1.60.1 - 2022-11-17
|
||||||
|
|
||||||
|
[See commits](https://github.com/rclone/rclone/compare/v1.60.0...v1.60.1)
|
||||||
|
|
||||||
|
* Bug Fixes
|
||||||
|
* lib/cache: Fix alias backend shutting down too soon (Nick Craig-Wood)
|
||||||
|
* wasm: Fix walltime link error by adding up-to-date wasm_exec.js (João Henrique Franco)
|
||||||
|
* docs
|
||||||
|
* Update faq.md with bisync (Samuel Johnson)
|
||||||
|
* Corrected download links in windows install docs (coultonluke)
|
||||||
|
* Add direct download link for windows arm64 (albertony)
|
||||||
|
* Remove link to rclone slack as it is no longer supported (Nick Craig-Wood)
|
||||||
|
* Faq: how to use a proxy server that requires a username and password (asdffdsazqqq)
|
||||||
|
* Oracle-object-storage: doc fix (Manoj Ghosh)
|
||||||
|
* Fix typo `remove` in rclone_serve_restic command (Joda Stößer)
|
||||||
|
* Fix character that was incorrectly interpreted as markdown (Clément Notin)
|
||||||
|
* VFS
|
||||||
|
* Fix deadlock caused by cache cleaner and upload finishing (Nick Craig-Wood)
|
||||||
|
* Local
|
||||||
|
* Clean absolute paths (albertony)
|
||||||
|
* Fix -L/--copy-links with filters missing directories (Nick Craig-Wood)
|
||||||
|
* Mailru
|
||||||
|
* Note that an app password is now needed (Nick Craig-Wood)
|
||||||
|
* Allow timestamps to be before the epoch 1970-01-01 (Nick Craig-Wood)
|
||||||
|
* S3
|
||||||
|
* Add provider quirk `--s3-might-gzip` to fix corrupted on transfer: sizes differ (Nick Craig-Wood)
|
||||||
|
* Allow Storj to server side copy since it seems to work now (Nick Craig-Wood)
|
||||||
|
* Fix for unchecked err value in s3 listv2 (Aaron Gokaslan)
|
||||||
|
* Add additional Wasabi locations (techknowlogick)
|
||||||
|
* Smb
|
||||||
|
* Fix `Failed to sync: context canceled` at the end of syncs (Nick Craig-Wood)
|
||||||
|
* WebDAV
|
||||||
|
* Fix Move/Copy/DirMove when using -server-side-across-configs (Nick Craig-Wood)
|
||||||
|
|
||||||
## v1.60.0 - 2022-10-21
|
## v1.60.0 - 2022-10-21
|
||||||
|
|
||||||
[See commits](https://github.com/rclone/rclone/compare/v1.59.0...v1.60.0)
|
[See commits](https://github.com/rclone/rclone/compare/v1.59.0...v1.60.0)
|
||||||
|
@ -45237,9 +45341,8 @@ of metadata, which breaks the desired 1:1 mapping of files to objects.
|
||||||
|
|
||||||
### Can rclone do bi-directional sync? ###
|
### Can rclone do bi-directional sync? ###
|
||||||
|
|
||||||
No, not at present. rclone only does uni-directional sync from A ->
|
Yes, since rclone v1.58.0, [bidirectional cloud sync](https://rclone.org/bisync/) is
|
||||||
B. It may do in the future though since it has all the primitives - it
|
available.
|
||||||
just requires writing the algorithm to do it.
|
|
||||||
|
|
||||||
### Can I use rclone with an HTTP proxy? ###
|
### Can I use rclone with an HTTP proxy? ###
|
||||||
|
|
||||||
|
@ -45264,6 +45367,14 @@ possibilities. So, on Linux, you may end up with code similar to
|
||||||
export HTTP_PROXY=$http_proxy
|
export HTTP_PROXY=$http_proxy
|
||||||
export HTTPS_PROXY=$http_proxy
|
export HTTPS_PROXY=$http_proxy
|
||||||
|
|
||||||
|
|
||||||
|
Note: If the proxy server requires a username and password, then use
|
||||||
|
|
||||||
|
export http_proxy=http://username:password@proxyserver:12345
|
||||||
|
export https_proxy=$http_proxy
|
||||||
|
export HTTP_PROXY=$http_proxy
|
||||||
|
export HTTPS_PROXY=$http_proxy
|
||||||
|
|
||||||
The `NO_PROXY` allows you to disable the proxy for specific hosts.
|
The `NO_PROXY` allows you to disable the proxy for specific hosts.
|
||||||
Hosts must be comma separated, and can contain domains or parts.
|
Hosts must be comma separated, and can contain domains or parts.
|
||||||
For instance "foo.com" also matches "bar.foo.com".
|
For instance "foo.com" also matches "bar.foo.com".
|
||||||
|
|
143
MANUAL.txt
generated
143
MANUAL.txt
generated
|
@ -1,6 +1,6 @@
|
||||||
rclone(1) User Manual
|
rclone(1) User Manual
|
||||||
Nick Craig-Wood
|
Nick Craig-Wood
|
||||||
Oct 21, 2022
|
Nov 17, 2022
|
||||||
|
|
||||||
Rclone syncs your files to cloud storage
|
Rclone syncs your files to cloud storage
|
||||||
|
|
||||||
|
@ -13781,7 +13781,7 @@ upon backend-specific capabilities.
|
||||||
Microsoft OneDrive Yes Yes Yes Yes Yes No No Yes Yes Yes
|
Microsoft OneDrive Yes Yes Yes Yes Yes No No Yes Yes Yes
|
||||||
OpenDrive Yes Yes Yes Yes No No No No No Yes
|
OpenDrive Yes Yes Yes Yes No No No No No Yes
|
||||||
OpenStack Swift Yes † Yes No No No Yes Yes No Yes No
|
OpenStack Swift Yes † Yes No No No Yes Yes No Yes No
|
||||||
Oracle Object Storage Yes Yes No No Yes Yes No No No No
|
Oracle Object Storage No Yes No No Yes Yes Yes No No No
|
||||||
pCloud Yes Yes Yes Yes Yes No No Yes Yes Yes
|
pCloud Yes Yes Yes Yes Yes No No Yes Yes Yes
|
||||||
premiumize.me Yes No Yes Yes No No No Yes Yes Yes
|
premiumize.me Yes No Yes Yes No No No Yes Yes Yes
|
||||||
put.io Yes No Yes Yes Yes No Yes No Yes Yes
|
put.io Yes No Yes Yes Yes No Yes No Yes Yes
|
||||||
|
@ -14038,7 +14038,7 @@ These flags are available for every command.
|
||||||
--use-json-log Use json log format
|
--use-json-log Use json log format
|
||||||
--use-mmap Use mmap allocator (see docs)
|
--use-mmap Use mmap allocator (see docs)
|
||||||
--use-server-modtime Use server modified time instead of object metadata
|
--use-server-modtime Use server modified time instead of object metadata
|
||||||
--user-agent string Set the user-agent to a specified string (default "rclone/v1.60.0")
|
--user-agent string Set the user-agent to a specified string (default "rclone/v1.60.1")
|
||||||
-v, --verbose count Print lots more stuff (repeat for more)
|
-v, --verbose count Print lots more stuff (repeat for more)
|
||||||
|
|
||||||
Backend Flags
|
Backend Flags
|
||||||
|
@ -14419,6 +14419,7 @@ and may be set in the config file.
|
||||||
--s3-max-upload-parts int Maximum number of parts in a multipart upload (default 10000)
|
--s3-max-upload-parts int Maximum number of parts in a multipart upload (default 10000)
|
||||||
--s3-memory-pool-flush-time Duration How often internal memory buffer pools will be flushed (default 1m0s)
|
--s3-memory-pool-flush-time Duration How often internal memory buffer pools will be flushed (default 1m0s)
|
||||||
--s3-memory-pool-use-mmap Whether to use mmap buffers in internal memory pool
|
--s3-memory-pool-use-mmap Whether to use mmap buffers in internal memory pool
|
||||||
|
--s3-might-gzip Tristate Set this if the backend might gzip objects (default unset)
|
||||||
--s3-no-check-bucket If set, don't attempt to check the bucket exists or create it
|
--s3-no-check-bucket If set, don't attempt to check the bucket exists or create it
|
||||||
--s3-no-head If set, don't HEAD uploaded objects to check integrity
|
--s3-no-head If set, don't HEAD uploaded objects to check integrity
|
||||||
--s3-no-head-object If set, do not do HEAD before GET when getting objects
|
--s3-no-head-object If set, do not do HEAD before GET when getting objects
|
||||||
|
@ -18425,15 +18426,31 @@ Properties:
|
||||||
- "s3.ap-southeast-1.lyvecloud.seagate.com"
|
- "s3.ap-southeast-1.lyvecloud.seagate.com"
|
||||||
- Seagate Lyve Cloud AP Southeast 1 (Singapore)
|
- Seagate Lyve Cloud AP Southeast 1 (Singapore)
|
||||||
- "s3.wasabisys.com"
|
- "s3.wasabisys.com"
|
||||||
- Wasabi US East endpoint
|
- Wasabi US East 1 (N. Virginia)
|
||||||
|
- "s3.us-east-2.wasabisys.com"
|
||||||
|
- Wasabi US East 2 (N. Virginia)
|
||||||
|
- "s3.us-central-1.wasabisys.com"
|
||||||
|
- Wasabi US Central 1 (Texas)
|
||||||
- "s3.us-west-1.wasabisys.com"
|
- "s3.us-west-1.wasabisys.com"
|
||||||
- Wasabi US West endpoint
|
- Wasabi US West 1 (Oregon)
|
||||||
|
- "s3.ca-central-1.wasabisys.com"
|
||||||
|
- Wasabi CA Central 1 (Toronto)
|
||||||
- "s3.eu-central-1.wasabisys.com"
|
- "s3.eu-central-1.wasabisys.com"
|
||||||
- Wasabi EU Central endpoint
|
- Wasabi EU Central 1 (Amsterdam)
|
||||||
|
- "s3.eu-central-2.wasabisys.com"
|
||||||
|
- Wasabi EU Central 2 (Frankfurt)
|
||||||
|
- "s3.eu-west-1.wasabisys.com"
|
||||||
|
- Wasabi EU West 1 (London)
|
||||||
|
- "s3.eu-west-2.wasabisys.com"
|
||||||
|
- Wasabi EU West 2 (Paris)
|
||||||
- "s3.ap-northeast-1.wasabisys.com"
|
- "s3.ap-northeast-1.wasabisys.com"
|
||||||
- Wasabi AP Northeast 1 (Tokyo) endpoint
|
- Wasabi AP Northeast 1 (Tokyo) endpoint
|
||||||
- "s3.ap-northeast-2.wasabisys.com"
|
- "s3.ap-northeast-2.wasabisys.com"
|
||||||
- Wasabi AP Northeast 2 (Osaka) endpoint
|
- Wasabi AP Northeast 2 (Osaka) endpoint
|
||||||
|
- "s3.ap-southeast-1.wasabisys.com"
|
||||||
|
- Wasabi AP Southeast 1 (Singapore)
|
||||||
|
- "s3.ap-southeast-2.wasabisys.com"
|
||||||
|
- Wasabi AP Southeast 2 (Sydney)
|
||||||
- "s3.ir-thr-at1.arvanstorage.com"
|
- "s3.ir-thr-at1.arvanstorage.com"
|
||||||
- ArvanCloud Tehran Iran (Asiatech) endpoint
|
- ArvanCloud Tehran Iran (Asiatech) endpoint
|
||||||
|
|
||||||
|
@ -19665,6 +19682,36 @@ Properties:
|
||||||
- Type: bool
|
- Type: bool
|
||||||
- Default: false
|
- Default: false
|
||||||
|
|
||||||
|
--s3-might-gzip
|
||||||
|
|
||||||
|
Set this if the backend might gzip objects.
|
||||||
|
|
||||||
|
Normally providers will not alter objects when they are downloaded. If
|
||||||
|
an object was not uploaded with Content-Encoding: gzip then it won't be
|
||||||
|
set on download.
|
||||||
|
|
||||||
|
However some providers may gzip objects even if they weren't uploaded
|
||||||
|
with Content-Encoding: gzip (eg Cloudflare).
|
||||||
|
|
||||||
|
A symptom of this would be receiving errors like
|
||||||
|
|
||||||
|
ERROR corrupted on transfer: sizes differ NNN vs MMM
|
||||||
|
|
||||||
|
If you set this flag and rclone downloads an object with
|
||||||
|
Content-Encoding: gzip set and chunked transfer encoding, then rclone
|
||||||
|
will decompress the object on the fly.
|
||||||
|
|
||||||
|
If this is set to unset (the default) then rclone will choose according
|
||||||
|
to the provider setting what to apply, but you can override rclone's
|
||||||
|
choice here.
|
||||||
|
|
||||||
|
Properties:
|
||||||
|
|
||||||
|
- Config: might_gzip
|
||||||
|
- Env Var: RCLONE_S3_MIGHT_GZIP
|
||||||
|
- Type: Tristate
|
||||||
|
- Default: unset
|
||||||
|
|
||||||
--s3-no-system-metadata
|
--s3-no-system-metadata
|
||||||
|
|
||||||
Suppress setting and reading of system metadata
|
Suppress setting and reading of system metadata
|
||||||
|
@ -31679,8 +31726,22 @@ Features highlights
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
|
|
||||||
Here is an example of making a mailru configuration. First create a
|
Here is an example of making a mailru configuration.
|
||||||
Mail.ru Cloud account and choose a tariff, then run
|
|
||||||
|
First create a Mail.ru Cloud account and choose a tariff.
|
||||||
|
|
||||||
|
You will need to log in and create an app password for rclone. Rclone
|
||||||
|
will not work with your normal username and password - it will give an
|
||||||
|
error like oauth2: server response missing access_token.
|
||||||
|
|
||||||
|
- Click on your user icon in the top right
|
||||||
|
- Go to Security / "Пароль и безопасность"
|
||||||
|
- Click password for apps / "Пароли для внешних приложений"
|
||||||
|
- Add the password - give it a name - eg "rclone"
|
||||||
|
- Copy the password and use this password below - your normal login
|
||||||
|
password won't work.
|
||||||
|
|
||||||
|
Now run
|
||||||
|
|
||||||
rclone config
|
rclone config
|
||||||
|
|
||||||
|
@ -31705,6 +31766,10 @@ This will guide you through an interactive setup process:
|
||||||
Enter a string value. Press Enter for the default ("").
|
Enter a string value. Press Enter for the default ("").
|
||||||
user> username@mail.ru
|
user> username@mail.ru
|
||||||
Password
|
Password
|
||||||
|
|
||||||
|
This must be an app password - rclone will not work with your normal
|
||||||
|
password. See the Configuration section in the docs for how to make an
|
||||||
|
app password.
|
||||||
y) Yes type in my own password
|
y) Yes type in my own password
|
||||||
g) Generate random password
|
g) Generate random password
|
||||||
y/g> y
|
y/g> y
|
||||||
|
@ -31826,6 +31891,10 @@ Properties:
|
||||||
|
|
||||||
Password.
|
Password.
|
||||||
|
|
||||||
|
This must be an app password - rclone will not work with your normal
|
||||||
|
password. See the Configuration section in the docs for how to make an
|
||||||
|
app password.
|
||||||
|
|
||||||
NB Input to this must be obscured - see rclone obscure.
|
NB Input to this must be obscured - see rclone obscure.
|
||||||
|
|
||||||
Properties:
|
Properties:
|
||||||
|
@ -40428,6 +40497,53 @@ Options:
|
||||||
|
|
||||||
Changelog
|
Changelog
|
||||||
|
|
||||||
|
v1.60.1 - 2022-11-17
|
||||||
|
|
||||||
|
See commits
|
||||||
|
|
||||||
|
- Bug Fixes
|
||||||
|
- lib/cache: Fix alias backend shutting down too soon (Nick
|
||||||
|
Craig-Wood)
|
||||||
|
- wasm: Fix walltime link error by adding up-to-date wasm_exec.js
|
||||||
|
(João Henrique Franco)
|
||||||
|
- docs
|
||||||
|
- Update faq.md with bisync (Samuel Johnson)
|
||||||
|
- Corrected download links in windows install docs
|
||||||
|
(coultonluke)
|
||||||
|
- Add direct download link for windows arm64 (albertony)
|
||||||
|
- Remove link to rclone slack as it is no longer supported
|
||||||
|
(Nick Craig-Wood)
|
||||||
|
- Faq: how to use a proxy server that requires a username and
|
||||||
|
password (asdffdsazqqq)
|
||||||
|
- Oracle-object-storage: doc fix (Manoj Ghosh)
|
||||||
|
- Fix typo remove in rclone_serve_restic command (Joda Stößer)
|
||||||
|
- Fix character that was incorrectly interpreted as markdown
|
||||||
|
(Clément Notin)
|
||||||
|
- VFS
|
||||||
|
- Fix deadlock caused by cache cleaner and upload finishing (Nick
|
||||||
|
Craig-Wood)
|
||||||
|
- Local
|
||||||
|
- Clean absolute paths (albertony)
|
||||||
|
- Fix -L/--copy-links with filters missing directories (Nick
|
||||||
|
Craig-Wood)
|
||||||
|
- Mailru
|
||||||
|
- Note that an app password is now needed (Nick Craig-Wood)
|
||||||
|
- Allow timestamps to be before the epoch 1970-01-01 (Nick
|
||||||
|
Craig-Wood)
|
||||||
|
- S3
|
||||||
|
- Add provider quirk --s3-might-gzip to fix corrupted on transfer:
|
||||||
|
sizes differ (Nick Craig-Wood)
|
||||||
|
- Allow Storj to server side copy since it seems to work now (Nick
|
||||||
|
Craig-Wood)
|
||||||
|
- Fix for unchecked err value in s3 listv2 (Aaron Gokaslan)
|
||||||
|
- Add additional Wasabi locations (techknowlogick)
|
||||||
|
- Smb
|
||||||
|
- Fix Failed to sync: context canceled at the end of syncs (Nick
|
||||||
|
Craig-Wood)
|
||||||
|
- WebDAV
|
||||||
|
- Fix Move/Copy/DirMove when using -server-side-across-configs
|
||||||
|
(Nick Craig-Wood)
|
||||||
|
|
||||||
v1.60.0 - 2022-10-21
|
v1.60.0 - 2022-10-21
|
||||||
|
|
||||||
See commits
|
See commits
|
||||||
|
@ -45966,9 +46082,7 @@ metadata, which breaks the desired 1:1 mapping of files to objects.
|
||||||
|
|
||||||
Can rclone do bi-directional sync?
|
Can rclone do bi-directional sync?
|
||||||
|
|
||||||
No, not at present. rclone only does uni-directional sync from A -> B.
|
Yes, since rclone v1.58.0, bidirectional cloud sync is available.
|
||||||
It may do in the future though since it has all the primitives - it just
|
|
||||||
requires writing the algorithm to do it.
|
|
||||||
|
|
||||||
Can I use rclone with an HTTP proxy?
|
Can I use rclone with an HTTP proxy?
|
||||||
|
|
||||||
|
@ -45993,6 +46107,13 @@ set all possibilities. So, on Linux, you may end up with code similar to
|
||||||
export HTTP_PROXY=$http_proxy
|
export HTTP_PROXY=$http_proxy
|
||||||
export HTTPS_PROXY=$http_proxy
|
export HTTPS_PROXY=$http_proxy
|
||||||
|
|
||||||
|
Note: If the proxy server requires a username and password, then use
|
||||||
|
|
||||||
|
export http_proxy=http://username:password@proxyserver:12345
|
||||||
|
export https_proxy=$http_proxy
|
||||||
|
export HTTP_PROXY=$http_proxy
|
||||||
|
export HTTPS_PROXY=$http_proxy
|
||||||
|
|
||||||
The NO_PROXY allows you to disable the proxy for specific hosts. Hosts
|
The NO_PROXY allows you to disable the proxy for specific hosts. Hosts
|
||||||
must be comma separated, and can contain domains or parts. For instance
|
must be comma separated, and can contain domains or parts. For instance
|
||||||
"foo.com" also matches "bar.foo.com".
|
"foo.com" also matches "bar.foo.com".
|
||||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
v1.60.0
|
v1.60.1
|
||||||
|
|
|
@ -521,11 +521,6 @@ func (f *Fs) List(ctx context.Context, dir string) (entries fs.DirEntries, err e
|
||||||
name := fi.Name()
|
name := fi.Name()
|
||||||
mode := fi.Mode()
|
mode := fi.Mode()
|
||||||
newRemote := f.cleanRemote(dir, name)
|
newRemote := f.cleanRemote(dir, name)
|
||||||
// Don't include non directory if not included
|
|
||||||
// we leave directory filtering to the layer above
|
|
||||||
if useFilter && !fi.IsDir() && !filter.IncludeRemote(newRemote) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
// Follow symlinks if required
|
// Follow symlinks if required
|
||||||
if f.opt.FollowSymlinks && (mode&os.ModeSymlink) != 0 {
|
if f.opt.FollowSymlinks && (mode&os.ModeSymlink) != 0 {
|
||||||
localPath := filepath.Join(fsDirPath, name)
|
localPath := filepath.Join(fsDirPath, name)
|
||||||
|
@ -542,6 +537,11 @@ func (f *Fs) List(ctx context.Context, dir string) (entries fs.DirEntries, err e
|
||||||
}
|
}
|
||||||
mode = fi.Mode()
|
mode = fi.Mode()
|
||||||
}
|
}
|
||||||
|
// Don't include non directory if not included
|
||||||
|
// we leave directory filtering to the layer above
|
||||||
|
if useFilter && !fi.IsDir() && !filter.IncludeRemote(newRemote) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
if fi.IsDir() {
|
if fi.IsDir() {
|
||||||
// Ignore directories which are symlinks. These are junction points under windows which
|
// Ignore directories which are symlinks. These are junction points under windows which
|
||||||
// are kind of a souped up symlink. Unix doesn't have directories which are symlinks.
|
// are kind of a souped up symlink. Unix doesn't have directories which are symlinks.
|
||||||
|
@ -1400,29 +1400,26 @@ func (o *Object) writeMetadata(metadata fs.Metadata) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func cleanRootPath(s string, noUNC bool, enc encoder.MultiEncoder) string {
|
func cleanRootPath(s string, noUNC bool, enc encoder.MultiEncoder) string {
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS != "windows" || !strings.HasPrefix(s, "\\") {
|
||||||
if !filepath.IsAbs(s) && !strings.HasPrefix(s, "\\") {
|
|
||||||
s2, err := filepath.Abs(s)
|
|
||||||
if err == nil {
|
|
||||||
s = s2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
s = filepath.ToSlash(s)
|
|
||||||
vol := filepath.VolumeName(s)
|
|
||||||
s = vol + enc.FromStandardPath(s[len(vol):])
|
|
||||||
s = filepath.FromSlash(s)
|
|
||||||
|
|
||||||
if !noUNC {
|
|
||||||
// Convert to UNC
|
|
||||||
s = file.UNCPath(s)
|
|
||||||
}
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
if !filepath.IsAbs(s) {
|
if !filepath.IsAbs(s) {
|
||||||
s2, err := filepath.Abs(s)
|
s2, err := filepath.Abs(s)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
s = s2
|
s = s2
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
s = filepath.Clean(s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
s = filepath.ToSlash(s)
|
||||||
|
vol := filepath.VolumeName(s)
|
||||||
|
s = vol + enc.FromStandardPath(s[len(vol):])
|
||||||
|
s = filepath.FromSlash(s)
|
||||||
|
if !noUNC {
|
||||||
|
// Convert to UNC
|
||||||
|
s = file.UNCPath(s)
|
||||||
|
}
|
||||||
|
return s
|
||||||
}
|
}
|
||||||
s = enc.FromStandardPath(s)
|
s = enc.FromStandardPath(s)
|
||||||
return s
|
return s
|
||||||
|
|
|
@ -69,6 +69,11 @@ func (w *BinWriter) WritePu64(val int64) {
|
||||||
w.b.Write(w.a[:binary.PutUvarint(w.a, uint64(val))])
|
w.b.Write(w.a[:binary.PutUvarint(w.a, uint64(val))])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WriteP64 writes an signed long as unsigned varint
|
||||||
|
func (w *BinWriter) WriteP64(val int64) {
|
||||||
|
w.b.Write(w.a[:binary.PutUvarint(w.a, uint64(val))])
|
||||||
|
}
|
||||||
|
|
||||||
// WriteString writes a zero-terminated string
|
// WriteString writes a zero-terminated string
|
||||||
func (w *BinWriter) WriteString(str string) {
|
func (w *BinWriter) WriteString(str string) {
|
||||||
buf := []byte(str)
|
buf := []byte(str)
|
||||||
|
|
|
@ -92,7 +92,12 @@ func init() {
|
||||||
Required: true,
|
Required: true,
|
||||||
}, {
|
}, {
|
||||||
Name: "pass",
|
Name: "pass",
|
||||||
Help: "Password.",
|
Help: `Password.
|
||||||
|
|
||||||
|
This must be an app password - rclone will not work with your normal
|
||||||
|
password. See the Configuration section in the docs for how to make an
|
||||||
|
app password.
|
||||||
|
`,
|
||||||
Required: true,
|
Required: true,
|
||||||
IsPassword: true,
|
IsPassword: true,
|
||||||
}, {
|
}, {
|
||||||
|
@ -641,12 +646,7 @@ func (f *Fs) itemToDirEntry(ctx context.Context, item *api.ListItem) (entry fs.D
|
||||||
return nil, -1, err
|
return nil, -1, err
|
||||||
}
|
}
|
||||||
|
|
||||||
mTime := int64(item.Mtime)
|
modTime := time.Unix(int64(item.Mtime), 0)
|
||||||
if mTime < 0 {
|
|
||||||
fs.Debugf(f, "Fixing invalid timestamp %d on mailru file %q", mTime, remote)
|
|
||||||
mTime = 0
|
|
||||||
}
|
|
||||||
modTime := time.Unix(mTime, 0)
|
|
||||||
|
|
||||||
isDir, err := f.isDir(item.Kind, remote)
|
isDir, err := f.isDir(item.Kind, remote)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -2058,7 +2058,7 @@ func (o *Object) addFileMetaData(ctx context.Context, overwrite bool) error {
|
||||||
req.WritePu16(0) // revision
|
req.WritePu16(0) // revision
|
||||||
req.WriteString(o.fs.opt.Enc.FromStandardPath(o.absPath()))
|
req.WriteString(o.fs.opt.Enc.FromStandardPath(o.absPath()))
|
||||||
req.WritePu64(o.size)
|
req.WritePu64(o.size)
|
||||||
req.WritePu64(o.modTime.Unix())
|
req.WriteP64(o.modTime.Unix())
|
||||||
req.WritePu32(0)
|
req.WritePu32(0)
|
||||||
req.Write(o.mrHash)
|
req.Write(o.mrHash)
|
||||||
|
|
||||||
|
|
|
@ -686,6 +686,7 @@ var (
|
||||||
_ fs.PutStreamer = &Fs{}
|
_ fs.PutStreamer = &Fs{}
|
||||||
_ fs.ListRer = &Fs{}
|
_ fs.ListRer = &Fs{}
|
||||||
_ fs.Commander = &Fs{}
|
_ fs.Commander = &Fs{}
|
||||||
|
_ fs.CleanUpper = &Fs{}
|
||||||
|
|
||||||
_ fs.Object = &Object{}
|
_ fs.Object = &Object{}
|
||||||
_ fs.MimeTyper = &Object{}
|
_ fs.MimeTyper = &Object{}
|
||||||
|
|
|
@ -1126,15 +1126,39 @@ func init() {
|
||||||
Provider: "LyveCloud",
|
Provider: "LyveCloud",
|
||||||
}, {
|
}, {
|
||||||
Value: "s3.wasabisys.com",
|
Value: "s3.wasabisys.com",
|
||||||
Help: "Wasabi US East endpoint",
|
Help: "Wasabi US East 1 (N. Virginia)",
|
||||||
|
Provider: "Wasabi",
|
||||||
|
}, {
|
||||||
|
Value: "s3.us-east-2.wasabisys.com",
|
||||||
|
Help: "Wasabi US East 2 (N. Virginia)",
|
||||||
|
Provider: "Wasabi",
|
||||||
|
}, {
|
||||||
|
Value: "s3.us-central-1.wasabisys.com",
|
||||||
|
Help: "Wasabi US Central 1 (Texas)",
|
||||||
Provider: "Wasabi",
|
Provider: "Wasabi",
|
||||||
}, {
|
}, {
|
||||||
Value: "s3.us-west-1.wasabisys.com",
|
Value: "s3.us-west-1.wasabisys.com",
|
||||||
Help: "Wasabi US West endpoint",
|
Help: "Wasabi US West 1 (Oregon)",
|
||||||
|
Provider: "Wasabi",
|
||||||
|
}, {
|
||||||
|
Value: "s3.ca-central-1.wasabisys.com",
|
||||||
|
Help: "Wasabi CA Central 1 (Toronto)",
|
||||||
Provider: "Wasabi",
|
Provider: "Wasabi",
|
||||||
}, {
|
}, {
|
||||||
Value: "s3.eu-central-1.wasabisys.com",
|
Value: "s3.eu-central-1.wasabisys.com",
|
||||||
Help: "Wasabi EU Central endpoint",
|
Help: "Wasabi EU Central 1 (Amsterdam)",
|
||||||
|
Provider: "Wasabi",
|
||||||
|
}, {
|
||||||
|
Value: "s3.eu-central-2.wasabisys.com",
|
||||||
|
Help: "Wasabi EU Central 2 (Frankfurt)",
|
||||||
|
Provider: "Wasabi",
|
||||||
|
}, {
|
||||||
|
Value: "s3.eu-west-1.wasabisys.com",
|
||||||
|
Help: "Wasabi EU West 1 (London)",
|
||||||
|
Provider: "Wasabi",
|
||||||
|
}, {
|
||||||
|
Value: "s3.eu-west-2.wasabisys.com",
|
||||||
|
Help: "Wasabi EU West 2 (Paris)",
|
||||||
Provider: "Wasabi",
|
Provider: "Wasabi",
|
||||||
}, {
|
}, {
|
||||||
Value: "s3.ap-northeast-1.wasabisys.com",
|
Value: "s3.ap-northeast-1.wasabisys.com",
|
||||||
|
@ -1144,6 +1168,14 @@ func init() {
|
||||||
Value: "s3.ap-northeast-2.wasabisys.com",
|
Value: "s3.ap-northeast-2.wasabisys.com",
|
||||||
Help: "Wasabi AP Northeast 2 (Osaka) endpoint",
|
Help: "Wasabi AP Northeast 2 (Osaka) endpoint",
|
||||||
Provider: "Wasabi",
|
Provider: "Wasabi",
|
||||||
|
}, {
|
||||||
|
Value: "s3.ap-southeast-1.wasabisys.com",
|
||||||
|
Help: "Wasabi AP Southeast 1 (Singapore)",
|
||||||
|
Provider: "Wasabi",
|
||||||
|
}, {
|
||||||
|
Value: "s3.ap-southeast-2.wasabisys.com",
|
||||||
|
Help: "Wasabi AP Southeast 2 (Sydney)",
|
||||||
|
Provider: "Wasabi",
|
||||||
}, {
|
}, {
|
||||||
Value: "s3.ir-thr-at1.arvanstorage.com",
|
Value: "s3.ir-thr-at1.arvanstorage.com",
|
||||||
Help: "ArvanCloud Tehran Iran (Asiatech) endpoint",
|
Help: "ArvanCloud Tehran Iran (Asiatech) endpoint",
|
||||||
|
@ -2164,6 +2196,31 @@ can't check the size and hash but the file contents will be decompressed.
|
||||||
`,
|
`,
|
||||||
Advanced: true,
|
Advanced: true,
|
||||||
Default: false,
|
Default: false,
|
||||||
|
}, {
|
||||||
|
Name: "might_gzip",
|
||||||
|
Help: strings.ReplaceAll(`Set this if the backend might gzip objects.
|
||||||
|
|
||||||
|
Normally providers will not alter objects when they are downloaded. If
|
||||||
|
an object was not uploaded with |Content-Encoding: gzip| then it won't
|
||||||
|
be set on download.
|
||||||
|
|
||||||
|
However some providers may gzip objects even if they weren't uploaded
|
||||||
|
with |Content-Encoding: gzip| (eg Cloudflare).
|
||||||
|
|
||||||
|
A symptom of this would be receiving errors like
|
||||||
|
|
||||||
|
ERROR corrupted on transfer: sizes differ NNN vs MMM
|
||||||
|
|
||||||
|
If you set this flag and rclone downloads an object with
|
||||||
|
Content-Encoding: gzip set and chunked transfer encoding, then rclone
|
||||||
|
will decompress the object on the fly.
|
||||||
|
|
||||||
|
If this is set to unset (the default) then rclone will choose
|
||||||
|
according to the provider setting what to apply, but you can override
|
||||||
|
rclone's choice here.
|
||||||
|
`, "|", "`"),
|
||||||
|
Default: fs.Tristate{},
|
||||||
|
Advanced: true,
|
||||||
}, {
|
}, {
|
||||||
Name: "no_system_metadata",
|
Name: "no_system_metadata",
|
||||||
Help: `Suppress setting and reading of system metadata`,
|
Help: `Suppress setting and reading of system metadata`,
|
||||||
|
@ -2295,6 +2352,7 @@ type Options struct {
|
||||||
Versions bool `config:"versions"`
|
Versions bool `config:"versions"`
|
||||||
VersionAt fs.Time `config:"version_at"`
|
VersionAt fs.Time `config:"version_at"`
|
||||||
Decompress bool `config:"decompress"`
|
Decompress bool `config:"decompress"`
|
||||||
|
MightGzip fs.Tristate `config:"might_gzip"`
|
||||||
NoSystemMetadata bool `config:"no_system_metadata"`
|
NoSystemMetadata bool `config:"no_system_metadata"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2655,10 +2713,12 @@ func setQuirks(opt *Options) {
|
||||||
virtualHostStyle = true
|
virtualHostStyle = true
|
||||||
urlEncodeListings = true
|
urlEncodeListings = true
|
||||||
useMultipartEtag = true
|
useMultipartEtag = true
|
||||||
|
mightGzip = true // assume all providers might gzip until proven otherwise
|
||||||
)
|
)
|
||||||
switch opt.Provider {
|
switch opt.Provider {
|
||||||
case "AWS":
|
case "AWS":
|
||||||
// No quirks
|
// No quirks
|
||||||
|
mightGzip = false // Never auto gzips objects
|
||||||
case "Alibaba":
|
case "Alibaba":
|
||||||
useMultipartEtag = false // Alibaba seems to calculate multipart Etags differently from AWS
|
useMultipartEtag = false // Alibaba seems to calculate multipart Etags differently from AWS
|
||||||
case "HuaweiOBS":
|
case "HuaweiOBS":
|
||||||
|
@ -2772,6 +2832,12 @@ func setQuirks(opt *Options) {
|
||||||
opt.UseMultipartEtag.Valid = true
|
opt.UseMultipartEtag.Valid = true
|
||||||
opt.UseMultipartEtag.Value = useMultipartEtag
|
opt.UseMultipartEtag.Value = useMultipartEtag
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set MightGzip if not manually set
|
||||||
|
if !opt.MightGzip.Valid {
|
||||||
|
opt.MightGzip.Valid = true
|
||||||
|
opt.MightGzip.Value = mightGzip
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// setRoot changes the root of the Fs
|
// setRoot changes the root of the Fs
|
||||||
|
@ -2889,7 +2955,6 @@ func NewFs(ctx context.Context, name, root string, m configmap.Mapper) (fs.Fs, e
|
||||||
return f, fs.ErrorIsFile
|
return f, fs.ErrorIsFile
|
||||||
}
|
}
|
||||||
if opt.Provider == "Storj" {
|
if opt.Provider == "Storj" {
|
||||||
f.features.Copy = nil
|
|
||||||
f.features.SetTier = false
|
f.features.SetTier = false
|
||||||
f.features.GetTier = false
|
f.features.GetTier = false
|
||||||
}
|
}
|
||||||
|
@ -3118,8 +3183,11 @@ func (f *Fs) newV2List(req *s3.ListObjectsV2Input) bucketLister {
|
||||||
// Do a V2 listing
|
// Do a V2 listing
|
||||||
func (ls *v2List) List(ctx context.Context) (resp *s3.ListObjectsV2Output, versionIDs []*string, err error) {
|
func (ls *v2List) List(ctx context.Context) (resp *s3.ListObjectsV2Output, versionIDs []*string, err error) {
|
||||||
resp, err = ls.f.c.ListObjectsV2WithContext(ctx, &ls.req)
|
resp, err = ls.f.c.ListObjectsV2WithContext(ctx, &ls.req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
ls.req.ContinuationToken = resp.NextContinuationToken
|
ls.req.ContinuationToken = resp.NextContinuationToken
|
||||||
return resp, nil, err
|
return resp, nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// URL Encode the listings
|
// URL Encode the listings
|
||||||
|
@ -4858,7 +4926,7 @@ func (o *Object) Open(ctx context.Context, options ...fs.OpenOption) (in io.Read
|
||||||
|
|
||||||
// Decompress body if necessary
|
// Decompress body if necessary
|
||||||
if aws.StringValue(resp.ContentEncoding) == "gzip" {
|
if aws.StringValue(resp.ContentEncoding) == "gzip" {
|
||||||
if o.fs.opt.Decompress {
|
if o.fs.opt.Decompress || (resp.ContentLength == nil && o.fs.opt.MightGzip.Value) {
|
||||||
return readers.NewGzipReader(resp.Body)
|
return readers.NewGzipReader(resp.Body)
|
||||||
}
|
}
|
||||||
o.fs.warnCompressed.Do(func() {
|
o.fs.warnCompressed.Do(func() {
|
||||||
|
|
|
@ -103,6 +103,10 @@ func (f *Fs) getSessions() int32 {
|
||||||
|
|
||||||
// Open a new connection to the SMB server.
|
// Open a new connection to the SMB server.
|
||||||
func (f *Fs) newConnection(ctx context.Context, share string) (c *conn, err error) {
|
func (f *Fs) newConnection(ctx context.Context, share string) (c *conn, err error) {
|
||||||
|
// As we are pooling these connections we need to decouple
|
||||||
|
// them from the current context
|
||||||
|
ctx = context.Background()
|
||||||
|
|
||||||
c, err = f.dial(ctx, "tcp", f.opt.Host+":"+f.opt.Port)
|
c, err = f.dial(ctx, "tcp", f.opt.Host+":"+f.opt.Port)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("couldn't connect SMB: %w", err)
|
return nil, fmt.Errorf("couldn't connect SMB: %w", err)
|
||||||
|
|
|
@ -991,6 +991,7 @@ func (f *Fs) copyOrMove(ctx context.Context, src fs.Object, remote string, metho
|
||||||
}
|
}
|
||||||
return nil, fs.ErrorCantMove
|
return nil, fs.ErrorCantMove
|
||||||
}
|
}
|
||||||
|
srcFs := srcObj.fs
|
||||||
dstPath := f.filePath(remote)
|
dstPath := f.filePath(remote)
|
||||||
err := f.mkParentDir(ctx, dstPath)
|
err := f.mkParentDir(ctx, dstPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -1013,9 +1014,10 @@ func (f *Fs) copyOrMove(ctx context.Context, src fs.Object, remote string, metho
|
||||||
if f.useOCMtime {
|
if f.useOCMtime {
|
||||||
opts.ExtraHeaders["X-OC-Mtime"] = fmt.Sprintf("%d", src.ModTime(ctx).Unix())
|
opts.ExtraHeaders["X-OC-Mtime"] = fmt.Sprintf("%d", src.ModTime(ctx).Unix())
|
||||||
}
|
}
|
||||||
err = f.pacer.Call(func() (bool, error) {
|
// Direct the MOVE/COPY to the source server
|
||||||
resp, err = f.srv.Call(ctx, &opts)
|
err = srcFs.pacer.Call(func() (bool, error) {
|
||||||
return f.shouldRetry(ctx, resp, err)
|
resp, err = srcFs.srv.Call(ctx, &opts)
|
||||||
|
return srcFs.shouldRetry(ctx, resp, err)
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Copy call failed: %w", err)
|
return nil, fmt.Errorf("Copy call failed: %w", err)
|
||||||
|
@ -1109,9 +1111,10 @@ func (f *Fs) DirMove(ctx context.Context, src fs.Fs, srcRemote, dstRemote string
|
||||||
"Overwrite": "F",
|
"Overwrite": "F",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
err = f.pacer.Call(func() (bool, error) {
|
// Direct the MOVE/COPY to the source server
|
||||||
resp, err = f.srv.Call(ctx, &opts)
|
err = srcFs.pacer.Call(func() (bool, error) {
|
||||||
return f.shouldRetry(ctx, resp, err)
|
resp, err = srcFs.srv.Call(ctx, &opts)
|
||||||
|
return srcFs.shouldRetry(ctx, resp, err)
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("DirMove MOVE call failed: %w", err)
|
return fmt.Errorf("DirMove MOVE call failed: %w", err)
|
||||||
|
|
|
@ -5,6 +5,40 @@ description: "Rclone Changelog"
|
||||||
|
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v1.60.1 - 2022-11-17
|
||||||
|
|
||||||
|
[See commits](https://github.com/rclone/rclone/compare/v1.60.0...v1.60.1)
|
||||||
|
|
||||||
|
* Bug Fixes
|
||||||
|
* lib/cache: Fix alias backend shutting down too soon (Nick Craig-Wood)
|
||||||
|
* wasm: Fix walltime link error by adding up-to-date wasm_exec.js (João Henrique Franco)
|
||||||
|
* docs
|
||||||
|
* Update faq.md with bisync (Samuel Johnson)
|
||||||
|
* Corrected download links in windows install docs (coultonluke)
|
||||||
|
* Add direct download link for windows arm64 (albertony)
|
||||||
|
* Remove link to rclone slack as it is no longer supported (Nick Craig-Wood)
|
||||||
|
* Faq: how to use a proxy server that requires a username and password (asdffdsazqqq)
|
||||||
|
* Oracle-object-storage: doc fix (Manoj Ghosh)
|
||||||
|
* Fix typo `remove` in rclone_serve_restic command (Joda Stößer)
|
||||||
|
* Fix character that was incorrectly interpreted as markdown (Clément Notin)
|
||||||
|
* VFS
|
||||||
|
* Fix deadlock caused by cache cleaner and upload finishing (Nick Craig-Wood)
|
||||||
|
* Local
|
||||||
|
* Clean absolute paths (albertony)
|
||||||
|
* Fix -L/--copy-links with filters missing directories (Nick Craig-Wood)
|
||||||
|
* Mailru
|
||||||
|
* Note that an app password is now needed (Nick Craig-Wood)
|
||||||
|
* Allow timestamps to be before the epoch 1970-01-01 (Nick Craig-Wood)
|
||||||
|
* S3
|
||||||
|
* Add provider quirk `--s3-might-gzip` to fix corrupted on transfer: sizes differ (Nick Craig-Wood)
|
||||||
|
* Allow Storj to server side copy since it seems to work now (Nick Craig-Wood)
|
||||||
|
* Fix for unchecked err value in s3 listv2 (Aaron Gokaslan)
|
||||||
|
* Add additional Wasabi locations (techknowlogick)
|
||||||
|
* Smb
|
||||||
|
* Fix `Failed to sync: context canceled` at the end of syncs (Nick Craig-Wood)
|
||||||
|
* WebDAV
|
||||||
|
* Fix Move/Copy/DirMove when using -server-side-across-configs (Nick Craig-Wood)
|
||||||
|
|
||||||
## v1.60.0 - 2022-10-21
|
## v1.60.0 - 2022-10-21
|
||||||
|
|
||||||
[See commits](https://github.com/rclone/rclone/compare/v1.59.0...v1.60.0)
|
[See commits](https://github.com/rclone/rclone/compare/v1.59.0...v1.60.0)
|
||||||
|
|
|
@ -85,7 +85,7 @@ script) from a URL which doesn't change then you can use these links.
|
||||||
| Intel/AMD - 32 Bit | {{< cdownload windows 386 >}} | - | {{< cdownload linux 386 >}} | {{< cdownload linux 386 deb >}} | {{< cdownload linux 386 rpm >}} | {{< cdownload freebsd 386 >}} | {{< cdownload netbsd 386 >}} | {{< cdownload openbsd 386 >}} | {{< cdownload plan9 386 >}} | - |
|
| Intel/AMD - 32 Bit | {{< cdownload windows 386 >}} | - | {{< cdownload linux 386 >}} | {{< cdownload linux 386 deb >}} | {{< cdownload linux 386 rpm >}} | {{< cdownload freebsd 386 >}} | {{< cdownload netbsd 386 >}} | {{< cdownload openbsd 386 >}} | {{< cdownload plan9 386 >}} | - |
|
||||||
| ARMv6 - 32 Bit | - | - | {{< cdownload linux arm >}} | {{< cdownload linux arm deb >}} | {{< cdownload linux arm rpm >}} | {{< cdownload freebsd arm >}} | {{< cdownload netbsd arm >}} | - | - | - |
|
| ARMv6 - 32 Bit | - | - | {{< cdownload linux arm >}} | {{< cdownload linux arm deb >}} | {{< cdownload linux arm rpm >}} | {{< cdownload freebsd arm >}} | {{< cdownload netbsd arm >}} | - | - | - |
|
||||||
| ARMv7 - 32 Bit | - | - | {{< cdownload linux arm-v7 >}} | {{< cdownload linux arm-v7 deb >}} | {{< cdownload linux arm-v7 rpm >}} | {{< cdownload freebsd arm-v7 >}} | {{< cdownload netbsd arm-v7 >}} | - | - | - |
|
| ARMv7 - 32 Bit | - | - | {{< cdownload linux arm-v7 >}} | {{< cdownload linux arm-v7 deb >}} | {{< cdownload linux arm-v7 rpm >}} | {{< cdownload freebsd arm-v7 >}} | {{< cdownload netbsd arm-v7 >}} | - | - | - |
|
||||||
| ARM - 64 Bit | - | {{< cdownload osx arm64 >}} | {{< cdownload linux arm64 >}} | {{< cdownload linux arm64 deb >}} | {{< cdownload linux arm64 rpm >}} | - | - | - | - | - |
|
| ARM - 64 Bit | {{< cdownload windows arm64 >}} | {{< cdownload osx arm64 >}} | {{< cdownload linux arm64 >}} | {{< cdownload linux arm64 deb >}} | {{< cdownload linux arm64 rpm >}} | - | - | - | - | - |
|
||||||
| MIPS - Big Endian | - | - | {{< cdownload linux mips >}} | {{< cdownload linux mips deb >}} | {{< cdownload linux mips rpm >}} | - | - | - | - | - |
|
| MIPS - Big Endian | - | - | {{< cdownload linux mips >}} | {{< cdownload linux mips deb >}} | {{< cdownload linux mips rpm >}} | - | - | - | - | - |
|
||||||
| MIPS - Little Endian | - | - | {{< cdownload linux mipsle >}} | {{< cdownload linux mipsle deb >}} | {{< cdownload linux mipsle rpm >}} | - | - | - | - | - |
|
| MIPS - Little Endian | - | - | {{< cdownload linux mipsle >}} | {{< cdownload linux mipsle deb >}} | {{< cdownload linux mipsle rpm >}} | - | - | - | - | - |
|
||||||
|
|
||||||
|
|
|
@ -82,9 +82,8 @@ of metadata, which breaks the desired 1:1 mapping of files to objects.
|
||||||
|
|
||||||
### Can rclone do bi-directional sync? ###
|
### Can rclone do bi-directional sync? ###
|
||||||
|
|
||||||
No, not at present. rclone only does uni-directional sync from A ->
|
Yes, since rclone v1.58.0, [bidirectional cloud sync](/bisync/) is
|
||||||
B. It may do in the future though since it has all the primitives - it
|
available.
|
||||||
just requires writing the algorithm to do it.
|
|
||||||
|
|
||||||
### Can I use rclone with an HTTP proxy? ###
|
### Can I use rclone with an HTTP proxy? ###
|
||||||
|
|
||||||
|
@ -109,6 +108,14 @@ possibilities. So, on Linux, you may end up with code similar to
|
||||||
export HTTP_PROXY=$http_proxy
|
export HTTP_PROXY=$http_proxy
|
||||||
export HTTPS_PROXY=$http_proxy
|
export HTTPS_PROXY=$http_proxy
|
||||||
|
|
||||||
|
|
||||||
|
Note: If the proxy server requires a username and password, then use
|
||||||
|
|
||||||
|
export http_proxy=http://username:password@proxyserver:12345
|
||||||
|
export https_proxy=$http_proxy
|
||||||
|
export HTTP_PROXY=$http_proxy
|
||||||
|
export HTTPS_PROXY=$http_proxy
|
||||||
|
|
||||||
The `NO_PROXY` allows you to disable the proxy for specific hosts.
|
The `NO_PROXY` allows you to disable the proxy for specific hosts.
|
||||||
Hosts must be comma separated, and can contain domains or parts.
|
Hosts must be comma separated, and can contain domains or parts.
|
||||||
For instance "foo.com" also matches "bar.foo.com".
|
For instance "foo.com" also matches "bar.foo.com".
|
||||||
|
|
|
@ -162,7 +162,7 @@ These flags are available for every command.
|
||||||
--use-json-log Use json log format
|
--use-json-log Use json log format
|
||||||
--use-mmap Use mmap allocator (see docs)
|
--use-mmap Use mmap allocator (see docs)
|
||||||
--use-server-modtime Use server modified time instead of object metadata
|
--use-server-modtime Use server modified time instead of object metadata
|
||||||
--user-agent string Set the user-agent to a specified string (default "rclone/v1.60.0")
|
--user-agent string Set the user-agent to a specified string (default "rclone/v1.60.1")
|
||||||
-v, --verbose count Print lots more stuff (repeat for more)
|
-v, --verbose count Print lots more stuff (repeat for more)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -545,6 +545,7 @@ and may be set in the config file.
|
||||||
--s3-max-upload-parts int Maximum number of parts in a multipart upload (default 10000)
|
--s3-max-upload-parts int Maximum number of parts in a multipart upload (default 10000)
|
||||||
--s3-memory-pool-flush-time Duration How often internal memory buffer pools will be flushed (default 1m0s)
|
--s3-memory-pool-flush-time Duration How often internal memory buffer pools will be flushed (default 1m0s)
|
||||||
--s3-memory-pool-use-mmap Whether to use mmap buffers in internal memory pool
|
--s3-memory-pool-use-mmap Whether to use mmap buffers in internal memory pool
|
||||||
|
--s3-might-gzip Tristate Set this if the backend might gzip objects (default unset)
|
||||||
--s3-no-check-bucket If set, don't attempt to check the bucket exists or create it
|
--s3-no-check-bucket If set, don't attempt to check the bucket exists or create it
|
||||||
--s3-no-head If set, don't HEAD uploaded objects to check integrity
|
--s3-no-head If set, don't HEAD uploaded objects to check integrity
|
||||||
--s3-no-head-object If set, do not do HEAD before GET when getting objects
|
--s3-no-head-object If set, do not do HEAD before GET when getting objects
|
||||||
|
|
|
@ -125,9 +125,9 @@ The simplest fix is to run
|
||||||
Fetch the correct binary for your processor type by clicking on these
|
Fetch the correct binary for your processor type by clicking on these
|
||||||
links. If not sure, use the first link.
|
links. If not sure, use the first link.
|
||||||
|
|
||||||
- [Intel/AMD - 64 Bit](https://downloads.rclone.org/rclone-current-linux-amd64.zip)
|
- [Intel/AMD - 64 Bit](https://downloads.rclone.org/rclone-current-windows-amd64.zip)
|
||||||
- [Intel/AMD - 32 Bit](https://downloads.rclone.org/rclone-current-linux-386.zip)
|
- [Intel/AMD - 32 Bit](https://downloads.rclone.org/rclone-current-windows-386.zip)
|
||||||
- [ARM - 64 Bit](https://downloads.rclone.org/rclone-current-linux-arm64.zip)
|
- [ARM - 64 Bit](https://downloads.rclone.org/rclone-current-windows-arm64.zip)
|
||||||
|
|
||||||
Open this file in the Explorer and extract `rclone.exe`. Rclone is a
|
Open this file in the Explorer and extract `rclone.exe`. Rclone is a
|
||||||
portable executable so you can place it wherever is convenient.
|
portable executable so you can place it wherever is convenient.
|
||||||
|
|
|
@ -24,8 +24,21 @@ Currently it is recommended to disable 2FA on Mail.ru accounts intended for rclo
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
Here is an example of making a mailru configuration. First create a Mail.ru Cloud
|
Here is an example of making a mailru configuration.
|
||||||
account and choose a tariff, then run
|
|
||||||
|
First create a Mail.ru Cloud account and choose a tariff.
|
||||||
|
|
||||||
|
You will need to log in and create an app password for rclone. Rclone
|
||||||
|
**will not work** with your normal username and password - it will
|
||||||
|
give an error like `oauth2: server response missing access_token`.
|
||||||
|
|
||||||
|
- Click on your user icon in the top right
|
||||||
|
- Go to Security / "Пароль и безопасность"
|
||||||
|
- Click password for apps / "Пароли для внешних приложений"
|
||||||
|
- Add the password - give it a name - eg "rclone"
|
||||||
|
- Copy the password and use this password below - your normal login password won't work.
|
||||||
|
|
||||||
|
Now run
|
||||||
|
|
||||||
rclone config
|
rclone config
|
||||||
|
|
||||||
|
@ -51,6 +64,10 @@ User name (usually email)
|
||||||
Enter a string value. Press Enter for the default ("").
|
Enter a string value. Press Enter for the default ("").
|
||||||
user> username@mail.ru
|
user> username@mail.ru
|
||||||
Password
|
Password
|
||||||
|
|
||||||
|
This must be an app password - rclone will not work with your normal
|
||||||
|
password. See the Configuration section in the docs for how to make an
|
||||||
|
app password.
|
||||||
y) Yes type in my own password
|
y) Yes type in my own password
|
||||||
g) Generate random password
|
g) Generate random password
|
||||||
y/g> y
|
y/g> y
|
||||||
|
@ -173,6 +190,11 @@ Properties:
|
||||||
|
|
||||||
Password.
|
Password.
|
||||||
|
|
||||||
|
This must be an app password - rclone will not work with your normal
|
||||||
|
password. See the Configuration section in the docs for how to make an
|
||||||
|
app password.
|
||||||
|
|
||||||
|
|
||||||
**NB** Input to this must be obscured - see [rclone obscure](/commands/rclone_obscure/).
|
**NB** Input to this must be obscured - see [rclone obscure](/commands/rclone_obscure/).
|
||||||
|
|
||||||
Properties:
|
Properties:
|
||||||
|
|
|
@ -494,7 +494,7 @@ upon backend-specific capabilities.
|
||||||
| Microsoft OneDrive | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes |
|
| Microsoft OneDrive | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes |
|
||||||
| OpenDrive | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes |
|
| OpenDrive | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes |
|
||||||
| OpenStack Swift | Yes † | Yes | No | No | No | Yes | Yes | No | Yes | No |
|
| OpenStack Swift | Yes † | Yes | No | No | No | Yes | Yes | No | Yes | No |
|
||||||
| Oracle Object Storage | Yes | Yes | No | No | Yes | Yes | No | No | No | No |
|
| Oracle Object Storage | No | Yes | No | No | Yes | Yes | Yes | No | No | No |
|
||||||
| pCloud | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes |
|
| pCloud | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes |
|
||||||
| premiumize.me | Yes | No | Yes | Yes | No | No | No | Yes | Yes | Yes |
|
| premiumize.me | Yes | No | Yes | Yes | No | No | No | Yes | Yes | Yes |
|
||||||
| put.io | Yes | No | Yes | Yes | Yes | No | Yes | No | Yes | Yes |
|
| put.io | Yes | No | Yes | Yes | Yes | No | Yes | No | Yes | Yes |
|
||||||
|
|
|
@ -1631,15 +1631,31 @@ Properties:
|
||||||
- "s3.ap-southeast-1.lyvecloud.seagate.com"
|
- "s3.ap-southeast-1.lyvecloud.seagate.com"
|
||||||
- Seagate Lyve Cloud AP Southeast 1 (Singapore)
|
- Seagate Lyve Cloud AP Southeast 1 (Singapore)
|
||||||
- "s3.wasabisys.com"
|
- "s3.wasabisys.com"
|
||||||
- Wasabi US East endpoint
|
- Wasabi US East 1 (N. Virginia)
|
||||||
|
- "s3.us-east-2.wasabisys.com"
|
||||||
|
- Wasabi US East 2 (N. Virginia)
|
||||||
|
- "s3.us-central-1.wasabisys.com"
|
||||||
|
- Wasabi US Central 1 (Texas)
|
||||||
- "s3.us-west-1.wasabisys.com"
|
- "s3.us-west-1.wasabisys.com"
|
||||||
- Wasabi US West endpoint
|
- Wasabi US West 1 (Oregon)
|
||||||
|
- "s3.ca-central-1.wasabisys.com"
|
||||||
|
- Wasabi CA Central 1 (Toronto)
|
||||||
- "s3.eu-central-1.wasabisys.com"
|
- "s3.eu-central-1.wasabisys.com"
|
||||||
- Wasabi EU Central endpoint
|
- Wasabi EU Central 1 (Amsterdam)
|
||||||
|
- "s3.eu-central-2.wasabisys.com"
|
||||||
|
- Wasabi EU Central 2 (Frankfurt)
|
||||||
|
- "s3.eu-west-1.wasabisys.com"
|
||||||
|
- Wasabi EU West 1 (London)
|
||||||
|
- "s3.eu-west-2.wasabisys.com"
|
||||||
|
- Wasabi EU West 2 (Paris)
|
||||||
- "s3.ap-northeast-1.wasabisys.com"
|
- "s3.ap-northeast-1.wasabisys.com"
|
||||||
- Wasabi AP Northeast 1 (Tokyo) endpoint
|
- Wasabi AP Northeast 1 (Tokyo) endpoint
|
||||||
- "s3.ap-northeast-2.wasabisys.com"
|
- "s3.ap-northeast-2.wasabisys.com"
|
||||||
- Wasabi AP Northeast 2 (Osaka) endpoint
|
- Wasabi AP Northeast 2 (Osaka) endpoint
|
||||||
|
- "s3.ap-southeast-1.wasabisys.com"
|
||||||
|
- Wasabi AP Southeast 1 (Singapore)
|
||||||
|
- "s3.ap-southeast-2.wasabisys.com"
|
||||||
|
- Wasabi AP Southeast 2 (Sydney)
|
||||||
- "s3.ir-thr-at1.arvanstorage.com"
|
- "s3.ir-thr-at1.arvanstorage.com"
|
||||||
- ArvanCloud Tehran Iran (Asiatech) endpoint
|
- ArvanCloud Tehran Iran (Asiatech) endpoint
|
||||||
|
|
||||||
|
@ -2858,6 +2874,37 @@ Properties:
|
||||||
- Type: bool
|
- Type: bool
|
||||||
- Default: false
|
- Default: false
|
||||||
|
|
||||||
|
#### --s3-might-gzip
|
||||||
|
|
||||||
|
Set this if the backend might gzip objects.
|
||||||
|
|
||||||
|
Normally providers will not alter objects when they are downloaded. If
|
||||||
|
an object was not uploaded with `Content-Encoding: gzip` then it won't
|
||||||
|
be set on download.
|
||||||
|
|
||||||
|
However some providers may gzip objects even if they weren't uploaded
|
||||||
|
with `Content-Encoding: gzip` (eg Cloudflare).
|
||||||
|
|
||||||
|
A symptom of this would be receiving errors like
|
||||||
|
|
||||||
|
ERROR corrupted on transfer: sizes differ NNN vs MMM
|
||||||
|
|
||||||
|
If you set this flag and rclone downloads an object with
|
||||||
|
Content-Encoding: gzip set and chunked transfer encoding, then rclone
|
||||||
|
will decompress the object on the fly.
|
||||||
|
|
||||||
|
If this is set to unset (the default) then rclone will choose
|
||||||
|
according to the provider setting what to apply, but you can override
|
||||||
|
rclone's choice here.
|
||||||
|
|
||||||
|
|
||||||
|
Properties:
|
||||||
|
|
||||||
|
- Config: might_gzip
|
||||||
|
- Env Var: RCLONE_S3_MIGHT_GZIP
|
||||||
|
- Type: Tristate
|
||||||
|
- Default: unset
|
||||||
|
|
||||||
#### --s3-no-system-metadata
|
#### --s3-no-system-metadata
|
||||||
|
|
||||||
Suppress setting and reading of system metadata
|
Suppress setting and reading of system metadata
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
<p class="menu">
|
<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="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="fab fa-github fa-fw" aria-hidden="true"></i> <a href="https://github.com/rclone/rclone">GitHub project</a><br />
|
||||||
<i class="fab fa-slack fa-fw" aria-hidden="true"></i> <a href="https://slack-invite.rclone.org/">Rclone slack</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-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="/donate/">Donate</a><br />
|
<i class="fa fa-heart heart fa-fw" aria-hidden="true"></i> <a href="/donate/">Donate</a><br />
|
||||||
<i class="fab fa-twitter fa-fw" aria-hidden="true"></i> <a href="https://twitter.com/njcw">@njcw</a>
|
<i class="fab fa-twitter fa-fw" aria-hidden="true"></i> <a href="https://twitter.com/njcw">@njcw</a>
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
v1.60.0
|
v1.60.1
|
|
@ -2,53 +2,32 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
(() => {
|
(() => {
|
||||||
// Map multiple JavaScript environments to a single common API,
|
|
||||||
// preferring web standards over Node.js API.
|
|
||||||
//
|
|
||||||
// Environments considered:
|
|
||||||
// - Browsers
|
|
||||||
// - Node.js
|
|
||||||
// - Electron
|
|
||||||
// - Parcel
|
|
||||||
|
|
||||||
if (typeof global !== "undefined") {
|
|
||||||
// global already exists
|
|
||||||
} else if (typeof window !== "undefined") {
|
|
||||||
window.global = window;
|
|
||||||
} else if (typeof self !== "undefined") {
|
|
||||||
self.global = self;
|
|
||||||
} else {
|
|
||||||
throw new Error("cannot export Go (neither global, window nor self is defined)");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!global.require && typeof require !== "undefined") {
|
|
||||||
global.require = require;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!global.fs && global.require) {
|
|
||||||
const fs = require("fs");
|
|
||||||
if (Object.keys(fs) !== 0) {
|
|
||||||
global.fs = fs;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const enosys = () => {
|
const enosys = () => {
|
||||||
const err = new Error("not implemented");
|
const err = new Error("not implemented");
|
||||||
err.code = "ENOSYS";
|
err.code = "ENOSYS";
|
||||||
return err;
|
return err;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!global.fs) {
|
if (!globalThis.fs) {
|
||||||
let outputBuf = "";
|
let outputBuf = "";
|
||||||
global.fs = {
|
globalThis.fs = {
|
||||||
constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 }, // unused
|
constants: {
|
||||||
|
O_WRONLY: -1,
|
||||||
|
O_RDWR: -1,
|
||||||
|
O_CREAT: -1,
|
||||||
|
O_TRUNC: -1,
|
||||||
|
O_APPEND: -1,
|
||||||
|
O_EXCL: -1,
|
||||||
|
}, // unused
|
||||||
writeSync(fd, buf) {
|
writeSync(fd, buf) {
|
||||||
outputBuf += decoder.decode(buf);
|
outputBuf += decoder.decode(buf);
|
||||||
const nl = outputBuf.lastIndexOf("\n");
|
const nl = outputBuf.lastIndexOf("\n");
|
||||||
if (nl != -1) {
|
if (nl != -1) {
|
||||||
console.log(outputBuf.substr(0, nl));
|
console.log(outputBuf.substring(0, nl));
|
||||||
outputBuf = outputBuf.substr(nl + 1);
|
outputBuf = outputBuf.substring(nl + 1);
|
||||||
}
|
}
|
||||||
return buf.length;
|
return buf.length;
|
||||||
},
|
},
|
||||||
|
@ -60,79 +39,137 @@
|
||||||
const n = this.writeSync(fd, buf);
|
const n = this.writeSync(fd, buf);
|
||||||
callback(null, n);
|
callback(null, n);
|
||||||
},
|
},
|
||||||
chmod(path, mode, callback) { callback(enosys()); },
|
chmod(path, mode, callback) {
|
||||||
chown(path, uid, gid, callback) { callback(enosys()); },
|
callback(enosys());
|
||||||
close(fd, callback) { callback(enosys()); },
|
},
|
||||||
fchmod(fd, mode, callback) { callback(enosys()); },
|
chown(path, uid, gid, callback) {
|
||||||
fchown(fd, uid, gid, callback) { callback(enosys()); },
|
callback(enosys());
|
||||||
fstat(fd, callback) { callback(enosys()); },
|
},
|
||||||
fsync(fd, callback) { callback(null); },
|
close(fd, callback) {
|
||||||
ftruncate(fd, length, callback) { callback(enosys()); },
|
callback(enosys());
|
||||||
lchown(path, uid, gid, callback) { callback(enosys()); },
|
},
|
||||||
link(path, link, callback) { callback(enosys()); },
|
fchmod(fd, mode, callback) {
|
||||||
lstat(path, callback) { callback(enosys()); },
|
callback(enosys());
|
||||||
mkdir(path, perm, callback) { callback(enosys()); },
|
},
|
||||||
open(path, flags, mode, callback) { callback(enosys()); },
|
fchown(fd, uid, gid, callback) {
|
||||||
read(fd, buffer, offset, length, position, callback) { callback(enosys()); },
|
callback(enosys());
|
||||||
readdir(path, callback) { callback(enosys()); },
|
},
|
||||||
readlink(path, callback) { callback(enosys()); },
|
fstat(fd, callback) {
|
||||||
rename(from, to, callback) { callback(enosys()); },
|
callback(enosys());
|
||||||
rmdir(path, callback) { callback(enosys()); },
|
},
|
||||||
stat(path, callback) { callback(enosys()); },
|
fsync(fd, callback) {
|
||||||
symlink(path, link, callback) { callback(enosys()); },
|
callback(null);
|
||||||
truncate(path, length, callback) { callback(enosys()); },
|
},
|
||||||
unlink(path, callback) { callback(enosys()); },
|
ftruncate(fd, length, callback) {
|
||||||
utimes(path, atime, mtime, callback) { callback(enosys()); },
|
callback(enosys());
|
||||||
|
},
|
||||||
|
lchown(path, uid, gid, callback) {
|
||||||
|
callback(enosys());
|
||||||
|
},
|
||||||
|
link(path, link, callback) {
|
||||||
|
callback(enosys());
|
||||||
|
},
|
||||||
|
lstat(path, callback) {
|
||||||
|
callback(enosys());
|
||||||
|
},
|
||||||
|
mkdir(path, perm, callback) {
|
||||||
|
callback(enosys());
|
||||||
|
},
|
||||||
|
open(path, flags, mode, callback) {
|
||||||
|
callback(enosys());
|
||||||
|
},
|
||||||
|
read(fd, buffer, offset, length, position, callback) {
|
||||||
|
callback(enosys());
|
||||||
|
},
|
||||||
|
readdir(path, callback) {
|
||||||
|
callback(enosys());
|
||||||
|
},
|
||||||
|
readlink(path, callback) {
|
||||||
|
callback(enosys());
|
||||||
|
},
|
||||||
|
rename(from, to, callback) {
|
||||||
|
callback(enosys());
|
||||||
|
},
|
||||||
|
rmdir(path, callback) {
|
||||||
|
callback(enosys());
|
||||||
|
},
|
||||||
|
stat(path, callback) {
|
||||||
|
callback(enosys());
|
||||||
|
},
|
||||||
|
symlink(path, link, callback) {
|
||||||
|
callback(enosys());
|
||||||
|
},
|
||||||
|
truncate(path, length, callback) {
|
||||||
|
callback(enosys());
|
||||||
|
},
|
||||||
|
unlink(path, callback) {
|
||||||
|
callback(enosys());
|
||||||
|
},
|
||||||
|
utimes(path, atime, mtime, callback) {
|
||||||
|
callback(enosys());
|
||||||
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!global.process) {
|
if (!globalThis.process) {
|
||||||
global.process = {
|
globalThis.process = {
|
||||||
getuid() { return -1; },
|
getuid() {
|
||||||
getgid() { return -1; },
|
return -1;
|
||||||
geteuid() { return -1; },
|
},
|
||||||
getegid() { return -1; },
|
getgid() {
|
||||||
getgroups() { throw enosys(); },
|
return -1;
|
||||||
|
},
|
||||||
|
geteuid() {
|
||||||
|
return -1;
|
||||||
|
},
|
||||||
|
getegid() {
|
||||||
|
return -1;
|
||||||
|
},
|
||||||
|
getgroups() {
|
||||||
|
throw enosys();
|
||||||
|
},
|
||||||
pid: -1,
|
pid: -1,
|
||||||
ppid: -1,
|
ppid: -1,
|
||||||
umask() { throw enosys(); },
|
umask() {
|
||||||
cwd() { throw enosys(); },
|
throw enosys();
|
||||||
chdir() { throw enosys(); },
|
},
|
||||||
}
|
cwd() {
|
||||||
}
|
throw enosys();
|
||||||
|
},
|
||||||
if (!global.crypto) {
|
chdir() {
|
||||||
const nodeCrypto = require("crypto");
|
throw enosys();
|
||||||
global.crypto = {
|
|
||||||
getRandomValues(b) {
|
|
||||||
nodeCrypto.randomFillSync(b);
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!global.performance) {
|
if (!globalThis.crypto) {
|
||||||
global.performance = {
|
throw new Error(
|
||||||
now() {
|
"globalThis.crypto is not available, polyfill required (crypto.getRandomValues only)",
|
||||||
const [sec, nsec] = process.hrtime();
|
);
|
||||||
return sec * 1000 + nsec / 1000000;
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!global.TextEncoder) {
|
if (!globalThis.performance) {
|
||||||
global.TextEncoder = require("util").TextEncoder;
|
throw new Error(
|
||||||
|
"globalThis.performance is not available, polyfill required (performance.now only)",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!global.TextDecoder) {
|
if (!globalThis.TextEncoder) {
|
||||||
global.TextDecoder = require("util").TextDecoder;
|
throw new Error(
|
||||||
|
"globalThis.TextEncoder is not available, polyfill required",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// End of polyfills for common API.
|
if (!globalThis.TextDecoder) {
|
||||||
|
throw new Error(
|
||||||
|
"globalThis.TextDecoder is not available, polyfill required",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const encoder = new TextEncoder("utf-8");
|
const encoder = new TextEncoder("utf-8");
|
||||||
const decoder = new TextDecoder("utf-8");
|
const decoder = new TextDecoder("utf-8");
|
||||||
|
|
||||||
global.Go = class {
|
globalThis.Go = class {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.argv = ["js"];
|
this.argv = ["js"];
|
||||||
this.env = {};
|
this.env = {};
|
||||||
|
@ -151,13 +188,13 @@
|
||||||
const setInt64 = (addr, v) => {
|
const setInt64 = (addr, v) => {
|
||||||
this.mem.setUint32(addr + 0, v, true);
|
this.mem.setUint32(addr + 0, v, true);
|
||||||
this.mem.setUint32(addr + 4, Math.floor(v / 4294967296), true);
|
this.mem.setUint32(addr + 4, Math.floor(v / 4294967296), true);
|
||||||
}
|
};
|
||||||
|
|
||||||
const getInt64 = (addr) => {
|
const getInt64 = (addr) => {
|
||||||
const low = this.mem.getUint32(addr + 0, true);
|
const low = this.mem.getUint32(addr + 0, true);
|
||||||
const high = this.mem.getInt32(addr + 4, true);
|
const high = this.mem.getInt32(addr + 4, true);
|
||||||
return low + high * 4294967296;
|
return low + high * 4294967296;
|
||||||
}
|
};
|
||||||
|
|
||||||
const loadValue = (addr) => {
|
const loadValue = (addr) => {
|
||||||
const f = this.mem.getFloat64(addr, true);
|
const f = this.mem.getFloat64(addr, true);
|
||||||
|
@ -170,7 +207,7 @@
|
||||||
|
|
||||||
const id = this.mem.getUint32(addr, true);
|
const id = this.mem.getUint32(addr, true);
|
||||||
return this._values[id];
|
return this._values[id];
|
||||||
}
|
};
|
||||||
|
|
||||||
const storeValue = (addr, v) => {
|
const storeValue = (addr, v) => {
|
||||||
const nanHead = 0x7FF80000;
|
const nanHead = 0x7FF80000;
|
||||||
|
@ -220,13 +257,13 @@
|
||||||
}
|
}
|
||||||
this.mem.setUint32(addr + 4, nanHead | typeFlag, true);
|
this.mem.setUint32(addr + 4, nanHead | typeFlag, true);
|
||||||
this.mem.setUint32(addr, id, true);
|
this.mem.setUint32(addr, id, true);
|
||||||
}
|
};
|
||||||
|
|
||||||
const loadSlice = (addr) => {
|
const loadSlice = (addr) => {
|
||||||
const array = getInt64(addr + 0);
|
const array = getInt64(addr + 0);
|
||||||
const len = getInt64(addr + 8);
|
const len = getInt64(addr + 8);
|
||||||
return new Uint8Array(this._inst.exports.mem.buffer, array, len);
|
return new Uint8Array(this._inst.exports.mem.buffer, array, len);
|
||||||
}
|
};
|
||||||
|
|
||||||
const loadSliceOfValues = (addr) => {
|
const loadSliceOfValues = (addr) => {
|
||||||
const array = getInt64(addr + 0);
|
const array = getInt64(addr + 0);
|
||||||
|
@ -236,13 +273,15 @@
|
||||||
a[i] = loadValue(array + i * 8);
|
a[i] = loadValue(array + i * 8);
|
||||||
}
|
}
|
||||||
return a;
|
return a;
|
||||||
}
|
};
|
||||||
|
|
||||||
const loadString = (addr) => {
|
const loadString = (addr) => {
|
||||||
const saddr = getInt64(addr + 0);
|
const saddr = getInt64(addr + 0);
|
||||||
const len = getInt64(addr + 8);
|
const len = getInt64(addr + 8);
|
||||||
return decoder.decode(new DataView(this._inst.exports.mem.buffer, saddr, len));
|
return decoder.decode(
|
||||||
}
|
new DataView(this._inst.exports.mem.buffer, saddr, len),
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const timeOrigin = Date.now() - performance.now();
|
const timeOrigin = Date.now() - performance.now();
|
||||||
this.importObject = {
|
this.importObject = {
|
||||||
|
@ -254,6 +293,7 @@
|
||||||
|
|
||||||
// func wasmExit(code int32)
|
// func wasmExit(code int32)
|
||||||
"runtime.wasmExit": (sp) => {
|
"runtime.wasmExit": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
const code = this.mem.getInt32(sp + 8, true);
|
const code = this.mem.getInt32(sp + 8, true);
|
||||||
this.exited = true;
|
this.exited = true;
|
||||||
delete this._inst;
|
delete this._inst;
|
||||||
|
@ -266,34 +306,44 @@
|
||||||
|
|
||||||
// func wasmWrite(fd uintptr, p unsafe.Pointer, n int32)
|
// func wasmWrite(fd uintptr, p unsafe.Pointer, n int32)
|
||||||
"runtime.wasmWrite": (sp) => {
|
"runtime.wasmWrite": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
const fd = getInt64(sp + 8);
|
const fd = getInt64(sp + 8);
|
||||||
const p = getInt64(sp + 16);
|
const p = getInt64(sp + 16);
|
||||||
const n = this.mem.getInt32(sp + 24, true);
|
const n = this.mem.getInt32(sp + 24, true);
|
||||||
fs.writeSync(fd, new Uint8Array(this._inst.exports.mem.buffer, p, n));
|
fs.writeSync(
|
||||||
|
fd,
|
||||||
|
new Uint8Array(this._inst.exports.mem.buffer, p, n),
|
||||||
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
// func resetMemoryDataView()
|
// func resetMemoryDataView()
|
||||||
"runtime.resetMemoryDataView": (sp) => {
|
"runtime.resetMemoryDataView": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
this.mem = new DataView(this._inst.exports.mem.buffer);
|
this.mem = new DataView(this._inst.exports.mem.buffer);
|
||||||
},
|
},
|
||||||
|
|
||||||
// func nanotime1() int64
|
// func nanotime1() int64
|
||||||
"runtime.nanotime1": (sp) => {
|
"runtime.nanotime1": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
setInt64(sp + 8, (timeOrigin + performance.now()) * 1000000);
|
setInt64(sp + 8, (timeOrigin + performance.now()) * 1000000);
|
||||||
},
|
},
|
||||||
|
|
||||||
// func walltime1() (sec int64, nsec int32)
|
// func walltime() (sec int64, nsec int32)
|
||||||
"runtime.walltime1": (sp) => {
|
"runtime.walltime": (sp) => {
|
||||||
const msec = (new Date).getTime();
|
sp >>>= 0;
|
||||||
|
const msec = (new Date()).getTime();
|
||||||
setInt64(sp + 8, msec / 1000);
|
setInt64(sp + 8, msec / 1000);
|
||||||
this.mem.setInt32(sp + 16, (msec % 1000) * 1000000, true);
|
this.mem.setInt32(sp + 16, (msec % 1000) * 1000000, true);
|
||||||
},
|
},
|
||||||
|
|
||||||
// func scheduleTimeoutEvent(delay int64) int32
|
// func scheduleTimeoutEvent(delay int64) int32
|
||||||
"runtime.scheduleTimeoutEvent": (sp) => {
|
"runtime.scheduleTimeoutEvent": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
const id = this._nextCallbackTimeoutID;
|
const id = this._nextCallbackTimeoutID;
|
||||||
this._nextCallbackTimeoutID++;
|
this._nextCallbackTimeoutID++;
|
||||||
this._scheduledTimeouts.set(id, setTimeout(
|
this._scheduledTimeouts.set(
|
||||||
|
id,
|
||||||
|
setTimeout(
|
||||||
() => {
|
() => {
|
||||||
this._resume();
|
this._resume();
|
||||||
while (this._scheduledTimeouts.has(id)) {
|
while (this._scheduledTimeouts.has(id)) {
|
||||||
|
@ -304,12 +354,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getInt64(sp + 8) + 1, // setTimeout has been seen to fire up to 1 millisecond early
|
getInt64(sp + 8) + 1, // setTimeout has been seen to fire up to 1 millisecond early
|
||||||
));
|
),
|
||||||
|
);
|
||||||
this.mem.setInt32(sp + 16, id, true);
|
this.mem.setInt32(sp + 16, id, true);
|
||||||
},
|
},
|
||||||
|
|
||||||
// func clearTimeoutEvent(id int32)
|
// func clearTimeoutEvent(id int32)
|
||||||
"runtime.clearTimeoutEvent": (sp) => {
|
"runtime.clearTimeoutEvent": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
const id = this.mem.getInt32(sp + 8, true);
|
const id = this.mem.getInt32(sp + 8, true);
|
||||||
clearTimeout(this._scheduledTimeouts.get(id));
|
clearTimeout(this._scheduledTimeouts.get(id));
|
||||||
this._scheduledTimeouts.delete(id);
|
this._scheduledTimeouts.delete(id);
|
||||||
|
@ -317,11 +369,13 @@
|
||||||
|
|
||||||
// func getRandomData(r []byte)
|
// func getRandomData(r []byte)
|
||||||
"runtime.getRandomData": (sp) => {
|
"runtime.getRandomData": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
crypto.getRandomValues(loadSlice(sp + 8));
|
crypto.getRandomValues(loadSlice(sp + 8));
|
||||||
},
|
},
|
||||||
|
|
||||||
// func finalizeRef(v ref)
|
// func finalizeRef(v ref)
|
||||||
"syscall/js.finalizeRef": (sp) => {
|
"syscall/js.finalizeRef": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
const id = this.mem.getUint32(sp + 8, true);
|
const id = this.mem.getUint32(sp + 8, true);
|
||||||
this._goRefCounts[id]--;
|
this._goRefCounts[id]--;
|
||||||
if (this._goRefCounts[id] === 0) {
|
if (this._goRefCounts[id] === 0) {
|
||||||
|
@ -334,47 +388,66 @@
|
||||||
|
|
||||||
// func stringVal(value string) ref
|
// func stringVal(value string) ref
|
||||||
"syscall/js.stringVal": (sp) => {
|
"syscall/js.stringVal": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
storeValue(sp + 24, loadString(sp + 8));
|
storeValue(sp + 24, loadString(sp + 8));
|
||||||
},
|
},
|
||||||
|
|
||||||
// func valueGet(v ref, p string) ref
|
// func valueGet(v ref, p string) ref
|
||||||
"syscall/js.valueGet": (sp) => {
|
"syscall/js.valueGet": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16));
|
const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16));
|
||||||
sp = this._inst.exports.getsp(); // see comment above
|
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||||
storeValue(sp + 32, result);
|
storeValue(sp + 32, result);
|
||||||
},
|
},
|
||||||
|
|
||||||
// func valueSet(v ref, p string, x ref)
|
// func valueSet(v ref, p string, x ref)
|
||||||
"syscall/js.valueSet": (sp) => {
|
"syscall/js.valueSet": (sp) => {
|
||||||
Reflect.set(loadValue(sp + 8), loadString(sp + 16), loadValue(sp + 32));
|
sp >>>= 0;
|
||||||
|
Reflect.set(
|
||||||
|
loadValue(sp + 8),
|
||||||
|
loadString(sp + 16),
|
||||||
|
loadValue(sp + 32),
|
||||||
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
// func valueDelete(v ref, p string)
|
// func valueDelete(v ref, p string)
|
||||||
"syscall/js.valueDelete": (sp) => {
|
"syscall/js.valueDelete": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
Reflect.deleteProperty(loadValue(sp + 8), loadString(sp + 16));
|
Reflect.deleteProperty(loadValue(sp + 8), loadString(sp + 16));
|
||||||
},
|
},
|
||||||
|
|
||||||
// func valueIndex(v ref, i int) ref
|
// func valueIndex(v ref, i int) ref
|
||||||
"syscall/js.valueIndex": (sp) => {
|
"syscall/js.valueIndex": (sp) => {
|
||||||
storeValue(sp + 24, Reflect.get(loadValue(sp + 8), getInt64(sp + 16)));
|
sp >>>= 0;
|
||||||
|
storeValue(
|
||||||
|
sp + 24,
|
||||||
|
Reflect.get(loadValue(sp + 8), getInt64(sp + 16)),
|
||||||
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
// valueSetIndex(v ref, i int, x ref)
|
// valueSetIndex(v ref, i int, x ref)
|
||||||
"syscall/js.valueSetIndex": (sp) => {
|
"syscall/js.valueSetIndex": (sp) => {
|
||||||
Reflect.set(loadValue(sp + 8), getInt64(sp + 16), loadValue(sp + 24));
|
sp >>>= 0;
|
||||||
|
Reflect.set(
|
||||||
|
loadValue(sp + 8),
|
||||||
|
getInt64(sp + 16),
|
||||||
|
loadValue(sp + 24),
|
||||||
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
// func valueCall(v ref, m string, args []ref) (ref, bool)
|
// func valueCall(v ref, m string, args []ref) (ref, bool)
|
||||||
"syscall/js.valueCall": (sp) => {
|
"syscall/js.valueCall": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
try {
|
try {
|
||||||
const v = loadValue(sp + 8);
|
const v = loadValue(sp + 8);
|
||||||
const m = Reflect.get(v, loadString(sp + 16));
|
const m = Reflect.get(v, loadString(sp + 16));
|
||||||
const args = loadSliceOfValues(sp + 32);
|
const args = loadSliceOfValues(sp + 32);
|
||||||
const result = Reflect.apply(m, v, args);
|
const result = Reflect.apply(m, v, args);
|
||||||
sp = this._inst.exports.getsp(); // see comment above
|
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||||
storeValue(sp + 56, result);
|
storeValue(sp + 56, result);
|
||||||
this.mem.setUint8(sp + 64, 1);
|
this.mem.setUint8(sp + 64, 1);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||||
storeValue(sp + 56, err);
|
storeValue(sp + 56, err);
|
||||||
this.mem.setUint8(sp + 64, 0);
|
this.mem.setUint8(sp + 64, 0);
|
||||||
}
|
}
|
||||||
|
@ -382,14 +455,16 @@
|
||||||
|
|
||||||
// func valueInvoke(v ref, args []ref) (ref, bool)
|
// func valueInvoke(v ref, args []ref) (ref, bool)
|
||||||
"syscall/js.valueInvoke": (sp) => {
|
"syscall/js.valueInvoke": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
try {
|
try {
|
||||||
const v = loadValue(sp + 8);
|
const v = loadValue(sp + 8);
|
||||||
const args = loadSliceOfValues(sp + 16);
|
const args = loadSliceOfValues(sp + 16);
|
||||||
const result = Reflect.apply(v, undefined, args);
|
const result = Reflect.apply(v, undefined, args);
|
||||||
sp = this._inst.exports.getsp(); // see comment above
|
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||||
storeValue(sp + 40, result);
|
storeValue(sp + 40, result);
|
||||||
this.mem.setUint8(sp + 48, 1);
|
this.mem.setUint8(sp + 48, 1);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||||
storeValue(sp + 40, err);
|
storeValue(sp + 40, err);
|
||||||
this.mem.setUint8(sp + 48, 0);
|
this.mem.setUint8(sp + 48, 0);
|
||||||
}
|
}
|
||||||
|
@ -397,14 +472,16 @@
|
||||||
|
|
||||||
// func valueNew(v ref, args []ref) (ref, bool)
|
// func valueNew(v ref, args []ref) (ref, bool)
|
||||||
"syscall/js.valueNew": (sp) => {
|
"syscall/js.valueNew": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
try {
|
try {
|
||||||
const v = loadValue(sp + 8);
|
const v = loadValue(sp + 8);
|
||||||
const args = loadSliceOfValues(sp + 16);
|
const args = loadSliceOfValues(sp + 16);
|
||||||
const result = Reflect.construct(v, args);
|
const result = Reflect.construct(v, args);
|
||||||
sp = this._inst.exports.getsp(); // see comment above
|
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||||
storeValue(sp + 40, result);
|
storeValue(sp + 40, result);
|
||||||
this.mem.setUint8(sp + 48, 1);
|
this.mem.setUint8(sp + 48, 1);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||||
storeValue(sp + 40, err);
|
storeValue(sp + 40, err);
|
||||||
this.mem.setUint8(sp + 48, 0);
|
this.mem.setUint8(sp + 48, 0);
|
||||||
}
|
}
|
||||||
|
@ -412,11 +489,13 @@
|
||||||
|
|
||||||
// func valueLength(v ref) int
|
// func valueLength(v ref) int
|
||||||
"syscall/js.valueLength": (sp) => {
|
"syscall/js.valueLength": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
setInt64(sp + 16, parseInt(loadValue(sp + 8).length));
|
setInt64(sp + 16, parseInt(loadValue(sp + 8).length));
|
||||||
},
|
},
|
||||||
|
|
||||||
// valuePrepareString(v ref) (ref, int)
|
// valuePrepareString(v ref) (ref, int)
|
||||||
"syscall/js.valuePrepareString": (sp) => {
|
"syscall/js.valuePrepareString": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
const str = encoder.encode(String(loadValue(sp + 8)));
|
const str = encoder.encode(String(loadValue(sp + 8)));
|
||||||
storeValue(sp + 16, str);
|
storeValue(sp + 16, str);
|
||||||
setInt64(sp + 24, str.length);
|
setInt64(sp + 24, str.length);
|
||||||
|
@ -424,20 +503,28 @@
|
||||||
|
|
||||||
// valueLoadString(v ref, b []byte)
|
// valueLoadString(v ref, b []byte)
|
||||||
"syscall/js.valueLoadString": (sp) => {
|
"syscall/js.valueLoadString": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
const str = loadValue(sp + 8);
|
const str = loadValue(sp + 8);
|
||||||
loadSlice(sp + 16).set(str);
|
loadSlice(sp + 16).set(str);
|
||||||
},
|
},
|
||||||
|
|
||||||
// func valueInstanceOf(v ref, t ref) bool
|
// func valueInstanceOf(v ref, t ref) bool
|
||||||
"syscall/js.valueInstanceOf": (sp) => {
|
"syscall/js.valueInstanceOf": (sp) => {
|
||||||
this.mem.setUint8(sp + 24, (loadValue(sp + 8) instanceof loadValue(sp + 16)) ? 1 : 0);
|
sp >>>= 0;
|
||||||
|
this.mem.setUint8(
|
||||||
|
sp + 24,
|
||||||
|
(loadValue(sp + 8) instanceof loadValue(sp + 16)) ? 1 : 0,
|
||||||
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
// func copyBytesToGo(dst []byte, src ref) (int, bool)
|
// func copyBytesToGo(dst []byte, src ref) (int, bool)
|
||||||
"syscall/js.copyBytesToGo": (sp) => {
|
"syscall/js.copyBytesToGo": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
const dst = loadSlice(sp + 8);
|
const dst = loadSlice(sp + 8);
|
||||||
const src = loadValue(sp + 32);
|
const src = loadValue(sp + 32);
|
||||||
if (!(src instanceof Uint8Array || src instanceof Uint8ClampedArray)) {
|
if (
|
||||||
|
!(src instanceof Uint8Array || src instanceof Uint8ClampedArray)
|
||||||
|
) {
|
||||||
this.mem.setUint8(sp + 48, 0);
|
this.mem.setUint8(sp + 48, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -449,9 +536,12 @@
|
||||||
|
|
||||||
// func copyBytesToJS(dst ref, src []byte) (int, bool)
|
// func copyBytesToJS(dst ref, src []byte) (int, bool)
|
||||||
"syscall/js.copyBytesToJS": (sp) => {
|
"syscall/js.copyBytesToJS": (sp) => {
|
||||||
|
sp >>>= 0;
|
||||||
const dst = loadValue(sp + 8);
|
const dst = loadValue(sp + 8);
|
||||||
const src = loadSlice(sp + 16);
|
const src = loadSlice(sp + 16);
|
||||||
if (!(dst instanceof Uint8Array || dst instanceof Uint8ClampedArray)) {
|
if (
|
||||||
|
!(dst instanceof Uint8Array || dst instanceof Uint8ClampedArray)
|
||||||
|
) {
|
||||||
this.mem.setUint8(sp + 48, 0);
|
this.mem.setUint8(sp + 48, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -464,11 +554,14 @@
|
||||||
"debug": (value) => {
|
"debug": (value) => {
|
||||||
console.log(value);
|
console.log(value);
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
async run(instance) {
|
async run(instance) {
|
||||||
|
if (!(instance instanceof WebAssembly.Instance)) {
|
||||||
|
throw new Error("Go.run: WebAssembly.Instance expected");
|
||||||
|
}
|
||||||
this._inst = instance;
|
this._inst = instance;
|
||||||
this.mem = new DataView(this._inst.exports.mem.buffer);
|
this.mem = new DataView(this._inst.exports.mem.buffer);
|
||||||
this._values = [ // JS values that Go currently has references to, indexed by reference id
|
this._values = [ // JS values that Go currently has references to, indexed by reference id
|
||||||
|
@ -477,7 +570,7 @@
|
||||||
null,
|
null,
|
||||||
true,
|
true,
|
||||||
false,
|
false,
|
||||||
global,
|
globalThis,
|
||||||
this,
|
this,
|
||||||
];
|
];
|
||||||
this._goRefCounts = new Array(this._values.length).fill(Infinity); // number of references that Go has to a JS value, indexed by reference id
|
this._goRefCounts = new Array(this._values.length).fill(Infinity); // number of references that Go has to a JS value, indexed by reference id
|
||||||
|
@ -486,7 +579,7 @@
|
||||||
[null, 2],
|
[null, 2],
|
||||||
[true, 3],
|
[true, 3],
|
||||||
[false, 4],
|
[false, 4],
|
||||||
[global, 5],
|
[globalThis, 5],
|
||||||
[this, 6],
|
[this, 6],
|
||||||
]);
|
]);
|
||||||
this._idPool = []; // unused ids that have been garbage collected
|
this._idPool = []; // unused ids that have been garbage collected
|
||||||
|
@ -527,6 +620,15 @@
|
||||||
offset += 8;
|
offset += 8;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// The linker guarantees global data starts from at least wasmMinDataAddr.
|
||||||
|
// Keep in sync with cmd/link/internal/ld/data.go:wasmMinDataAddr.
|
||||||
|
const wasmMinDataAddr = 4096 + 8192;
|
||||||
|
if (offset >= wasmMinDataAddr) {
|
||||||
|
throw new Error(
|
||||||
|
"total length of command line and environment variables exceeds limit",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
this._inst.exports.run(argc, argv);
|
this._inst.exports.run(argc, argv);
|
||||||
if (this.exited) {
|
if (this.exited) {
|
||||||
this._resolveExitPromise();
|
this._resolveExitPromise();
|
||||||
|
@ -553,36 +655,5 @@
|
||||||
return event.result;
|
return event.result;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
if (
|
|
||||||
global.require &&
|
|
||||||
global.require.main === module &&
|
|
||||||
global.process &&
|
|
||||||
global.process.versions &&
|
|
||||||
!global.process.versions.electron
|
|
||||||
) {
|
|
||||||
if (process.argv.length < 3) {
|
|
||||||
console.error("usage: go_js_wasm_exec [wasm binary] [arguments]");
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
const go = new Go();
|
|
||||||
go.argv = process.argv.slice(2);
|
|
||||||
go.env = Object.assign({ TMPDIR: require("os").tmpdir() }, process.env);
|
|
||||||
go.exit = process.exit;
|
|
||||||
WebAssembly.instantiate(fs.readFileSync(process.argv[2]), go.importObject).then((result) => {
|
|
||||||
process.on("exit", (code) => { // Node.js exits if no event handler is pending
|
|
||||||
if (code === 0 && !go.exited) {
|
|
||||||
// deadlock, make Go print error and stack traces
|
|
||||||
go._pendingEvent = { id: 0 };
|
|
||||||
go._resume();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return go.run(result.instance);
|
|
||||||
}).catch((err) => {
|
|
||||||
console.error(err);
|
|
||||||
process.exit(1);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})();
|
})();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package fs
|
package fs
|
||||||
|
|
||||||
// VersionTag of rclone
|
// VersionTag of rclone
|
||||||
var VersionTag = "v1.60.0"
|
var VersionTag = "v1.60.1"
|
||||||
|
|
6
lib/cache/cache.go
vendored
6
lib/cache/cache.go
vendored
|
@ -190,10 +190,12 @@ func (c *Cache) Rename(oldKey, newKey string) (value interface{}, found bool) {
|
||||||
c.mu.Lock()
|
c.mu.Lock()
|
||||||
if newEntry, newFound := c.cache[newKey]; newFound {
|
if newEntry, newFound := c.cache[newKey]; newFound {
|
||||||
// If new entry is found use that
|
// If new entry is found use that
|
||||||
if _, oldFound := c.cache[oldKey]; oldFound {
|
if oldEntry, oldFound := c.cache[oldKey]; oldFound {
|
||||||
// If there's an old entry, we drop it and also try shutdown.
|
// If there's an old entry that is different we must finalize it
|
||||||
|
if newEntry.value != oldEntry.value {
|
||||||
c.finalize(c.cache[oldKey].value)
|
c.finalize(c.cache[oldKey].value)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
delete(c.cache, oldKey)
|
delete(c.cache, oldKey)
|
||||||
value, found = newEntry.value, newFound
|
value, found = newEntry.value, newFound
|
||||||
c.used(newEntry)
|
c.used(newEntry)
|
||||||
|
|
247
rclone.1
generated
247
rclone.1
generated
|
@ -1,7 +1,7 @@
|
||||||
.\"t
|
.\"t
|
||||||
.\" Automatically generated by Pandoc 2.9.2.1
|
.\" Automatically generated by Pandoc 2.9.2.1
|
||||||
.\"
|
.\"
|
||||||
.TH "rclone" "1" "Oct 21, 2022" "User Manual" ""
|
.TH "rclone" "1" "Nov 17, 2022" "User Manual" ""
|
||||||
.hy
|
.hy
|
||||||
.SH Rclone syncs your files to cloud storage
|
.SH Rclone syncs your files to cloud storage
|
||||||
.PP
|
.PP
|
||||||
|
@ -490,13 +490,13 @@ links.
|
||||||
If not sure, use the first link.
|
If not sure, use the first link.
|
||||||
.IP \[bu] 2
|
.IP \[bu] 2
|
||||||
Intel/AMD - 64
|
Intel/AMD - 64
|
||||||
Bit (https://downloads.rclone.org/rclone-current-linux-amd64.zip)
|
Bit (https://downloads.rclone.org/rclone-current-windows-amd64.zip)
|
||||||
.IP \[bu] 2
|
.IP \[bu] 2
|
||||||
Intel/AMD - 32
|
Intel/AMD - 32
|
||||||
Bit (https://downloads.rclone.org/rclone-current-linux-386.zip)
|
Bit (https://downloads.rclone.org/rclone-current-windows-386.zip)
|
||||||
.IP \[bu] 2
|
.IP \[bu] 2
|
||||||
ARM - 64
|
ARM - 64
|
||||||
Bit (https://downloads.rclone.org/rclone-current-linux-arm64.zip)
|
Bit (https://downloads.rclone.org/rclone-current-windows-arm64.zip)
|
||||||
.PP
|
.PP
|
||||||
Open this file in the Explorer and extract \f[C]rclone.exe\f[R].
|
Open this file in the Explorer and extract \f[C]rclone.exe\f[R].
|
||||||
Rclone is a portable executable so you can place it wherever is
|
Rclone is a portable executable so you can place it wherever is
|
||||||
|
@ -19313,7 +19313,7 @@ T}
|
||||||
T{
|
T{
|
||||||
Oracle Object Storage
|
Oracle Object Storage
|
||||||
T}@T{
|
T}@T{
|
||||||
Yes
|
No
|
||||||
T}@T{
|
T}@T{
|
||||||
Yes
|
Yes
|
||||||
T}@T{
|
T}@T{
|
||||||
|
@ -19325,7 +19325,7 @@ Yes
|
||||||
T}@T{
|
T}@T{
|
||||||
Yes
|
Yes
|
||||||
T}@T{
|
T}@T{
|
||||||
No
|
Yes
|
||||||
T}@T{
|
T}@T{
|
||||||
No
|
No
|
||||||
T}@T{
|
T}@T{
|
||||||
|
@ -19924,7 +19924,7 @@ These flags are available for every command.
|
||||||
--use-json-log Use json log format
|
--use-json-log Use json log format
|
||||||
--use-mmap Use mmap allocator (see docs)
|
--use-mmap Use mmap allocator (see docs)
|
||||||
--use-server-modtime Use server modified time instead of object metadata
|
--use-server-modtime Use server modified time instead of object metadata
|
||||||
--user-agent string Set the user-agent to a specified string (default \[dq]rclone/v1.60.0\[dq])
|
--user-agent string Set the user-agent to a specified string (default \[dq]rclone/v1.60.1\[dq])
|
||||||
-v, --verbose count Print lots more stuff (repeat for more)
|
-v, --verbose count Print lots more stuff (repeat for more)
|
||||||
\f[R]
|
\f[R]
|
||||||
.fi
|
.fi
|
||||||
|
@ -20308,6 +20308,7 @@ They control the backends and may be set in the config file.
|
||||||
--s3-max-upload-parts int Maximum number of parts in a multipart upload (default 10000)
|
--s3-max-upload-parts int Maximum number of parts in a multipart upload (default 10000)
|
||||||
--s3-memory-pool-flush-time Duration How often internal memory buffer pools will be flushed (default 1m0s)
|
--s3-memory-pool-flush-time Duration How often internal memory buffer pools will be flushed (default 1m0s)
|
||||||
--s3-memory-pool-use-mmap Whether to use mmap buffers in internal memory pool
|
--s3-memory-pool-use-mmap Whether to use mmap buffers in internal memory pool
|
||||||
|
--s3-might-gzip Tristate Set this if the backend might gzip objects (default unset)
|
||||||
--s3-no-check-bucket If set, don\[aq]t attempt to check the bucket exists or create it
|
--s3-no-check-bucket If set, don\[aq]t attempt to check the bucket exists or create it
|
||||||
--s3-no-head If set, don\[aq]t HEAD uploaded objects to check integrity
|
--s3-no-head If set, don\[aq]t HEAD uploaded objects to check integrity
|
||||||
--s3-no-head-object If set, do not do HEAD before GET when getting objects
|
--s3-no-head-object If set, do not do HEAD before GET when getting objects
|
||||||
|
@ -26648,19 +26649,57 @@ Seagate Lyve Cloud AP Southeast 1 (Singapore)
|
||||||
\[dq]s3.wasabisys.com\[dq]
|
\[dq]s3.wasabisys.com\[dq]
|
||||||
.RS 2
|
.RS 2
|
||||||
.IP \[bu] 2
|
.IP \[bu] 2
|
||||||
Wasabi US East endpoint
|
Wasabi US East 1 (N.
|
||||||
|
Virginia)
|
||||||
|
.RE
|
||||||
|
.IP \[bu] 2
|
||||||
|
\[dq]s3.us-east-2.wasabisys.com\[dq]
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Wasabi US East 2 (N.
|
||||||
|
Virginia)
|
||||||
|
.RE
|
||||||
|
.IP \[bu] 2
|
||||||
|
\[dq]s3.us-central-1.wasabisys.com\[dq]
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Wasabi US Central 1 (Texas)
|
||||||
.RE
|
.RE
|
||||||
.IP \[bu] 2
|
.IP \[bu] 2
|
||||||
\[dq]s3.us-west-1.wasabisys.com\[dq]
|
\[dq]s3.us-west-1.wasabisys.com\[dq]
|
||||||
.RS 2
|
.RS 2
|
||||||
.IP \[bu] 2
|
.IP \[bu] 2
|
||||||
Wasabi US West endpoint
|
Wasabi US West 1 (Oregon)
|
||||||
|
.RE
|
||||||
|
.IP \[bu] 2
|
||||||
|
\[dq]s3.ca-central-1.wasabisys.com\[dq]
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Wasabi CA Central 1 (Toronto)
|
||||||
.RE
|
.RE
|
||||||
.IP \[bu] 2
|
.IP \[bu] 2
|
||||||
\[dq]s3.eu-central-1.wasabisys.com\[dq]
|
\[dq]s3.eu-central-1.wasabisys.com\[dq]
|
||||||
.RS 2
|
.RS 2
|
||||||
.IP \[bu] 2
|
.IP \[bu] 2
|
||||||
Wasabi EU Central endpoint
|
Wasabi EU Central 1 (Amsterdam)
|
||||||
|
.RE
|
||||||
|
.IP \[bu] 2
|
||||||
|
\[dq]s3.eu-central-2.wasabisys.com\[dq]
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Wasabi EU Central 2 (Frankfurt)
|
||||||
|
.RE
|
||||||
|
.IP \[bu] 2
|
||||||
|
\[dq]s3.eu-west-1.wasabisys.com\[dq]
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Wasabi EU West 1 (London)
|
||||||
|
.RE
|
||||||
|
.IP \[bu] 2
|
||||||
|
\[dq]s3.eu-west-2.wasabisys.com\[dq]
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Wasabi EU West 2 (Paris)
|
||||||
.RE
|
.RE
|
||||||
.IP \[bu] 2
|
.IP \[bu] 2
|
||||||
\[dq]s3.ap-northeast-1.wasabisys.com\[dq]
|
\[dq]s3.ap-northeast-1.wasabisys.com\[dq]
|
||||||
|
@ -26675,6 +26714,18 @@ Wasabi AP Northeast 1 (Tokyo) endpoint
|
||||||
Wasabi AP Northeast 2 (Osaka) endpoint
|
Wasabi AP Northeast 2 (Osaka) endpoint
|
||||||
.RE
|
.RE
|
||||||
.IP \[bu] 2
|
.IP \[bu] 2
|
||||||
|
\[dq]s3.ap-southeast-1.wasabisys.com\[dq]
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Wasabi AP Southeast 1 (Singapore)
|
||||||
|
.RE
|
||||||
|
.IP \[bu] 2
|
||||||
|
\[dq]s3.ap-southeast-2.wasabisys.com\[dq]
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Wasabi AP Southeast 2 (Sydney)
|
||||||
|
.RE
|
||||||
|
.IP \[bu] 2
|
||||||
\[dq]s3.ir-thr-at1.arvanstorage.com\[dq]
|
\[dq]s3.ir-thr-at1.arvanstorage.com\[dq]
|
||||||
.RS 2
|
.RS 2
|
||||||
.IP \[bu] 2
|
.IP \[bu] 2
|
||||||
|
@ -28823,6 +28874,42 @@ Env Var: RCLONE_S3_DECOMPRESS
|
||||||
Type: bool
|
Type: bool
|
||||||
.IP \[bu] 2
|
.IP \[bu] 2
|
||||||
Default: false
|
Default: false
|
||||||
|
.SS --s3-might-gzip
|
||||||
|
.PP
|
||||||
|
Set this if the backend might gzip objects.
|
||||||
|
.PP
|
||||||
|
Normally providers will not alter objects when they are downloaded.
|
||||||
|
If an object was not uploaded with \f[C]Content-Encoding: gzip\f[R] then
|
||||||
|
it won\[aq]t be set on download.
|
||||||
|
.PP
|
||||||
|
However some providers may gzip objects even if they weren\[aq]t
|
||||||
|
uploaded with \f[C]Content-Encoding: gzip\f[R] (eg Cloudflare).
|
||||||
|
.PP
|
||||||
|
A symptom of this would be receiving errors like
|
||||||
|
.IP
|
||||||
|
.nf
|
||||||
|
\f[C]
|
||||||
|
ERROR corrupted on transfer: sizes differ NNN vs MMM
|
||||||
|
\f[R]
|
||||||
|
.fi
|
||||||
|
.PP
|
||||||
|
If you set this flag and rclone downloads an object with
|
||||||
|
Content-Encoding: gzip set and chunked transfer encoding, then rclone
|
||||||
|
will decompress the object on the fly.
|
||||||
|
.PP
|
||||||
|
If this is set to unset (the default) then rclone will choose according
|
||||||
|
to the provider setting what to apply, but you can override rclone\[aq]s
|
||||||
|
choice here.
|
||||||
|
.PP
|
||||||
|
Properties:
|
||||||
|
.IP \[bu] 2
|
||||||
|
Config: might_gzip
|
||||||
|
.IP \[bu] 2
|
||||||
|
Env Var: RCLONE_S3_MIGHT_GZIP
|
||||||
|
.IP \[bu] 2
|
||||||
|
Type: Tristate
|
||||||
|
.IP \[bu] 2
|
||||||
|
Default: unset
|
||||||
.SS --s3-no-system-metadata
|
.SS --s3-no-system-metadata
|
||||||
.PP
|
.PP
|
||||||
Suppress setting and reading of system metadata
|
Suppress setting and reading of system metadata
|
||||||
|
@ -44213,7 +44300,32 @@ supported by rclone)
|
||||||
.SS Configuration
|
.SS Configuration
|
||||||
.PP
|
.PP
|
||||||
Here is an example of making a mailru configuration.
|
Here is an example of making a mailru configuration.
|
||||||
First create a Mail.ru Cloud account and choose a tariff, then run
|
.PP
|
||||||
|
First create a Mail.ru Cloud account and choose a tariff.
|
||||||
|
.PP
|
||||||
|
You will need to log in and create an app password for rclone.
|
||||||
|
Rclone \f[B]will not work\f[R] with your normal username and password -
|
||||||
|
it will give an error like
|
||||||
|
\f[C]oauth2: server response missing access_token\f[R].
|
||||||
|
.IP \[bu] 2
|
||||||
|
Click on your user icon in the top right
|
||||||
|
.IP \[bu] 2
|
||||||
|
Go to Security / \[dq]\[u041F]\[u0430]\[u0440]\[u043E]\[u043B]\[u044C]
|
||||||
|
\[u0438]
|
||||||
|
\[u0431]\[u0435]\[u0437]\[u043E]\[u043F]\[u0430]\[u0441]\[u043D]\[u043E]\[u0441]\[u0442]\[u044C]\[dq]
|
||||||
|
.IP \[bu] 2
|
||||||
|
Click password for apps /
|
||||||
|
\[dq]\[u041F]\[u0430]\[u0440]\[u043E]\[u043B]\[u0438]
|
||||||
|
\[u0434]\[u043B]\[u044F]
|
||||||
|
\[u0432]\[u043D]\[u0435]\[u0448]\[u043D]\[u0438]\[u0445]
|
||||||
|
\[u043F]\[u0440]\[u0438]\[u043B]\[u043E]\[u0436]\[u0435]\[u043D]\[u0438]\[u0439]\[dq]
|
||||||
|
.IP \[bu] 2
|
||||||
|
Add the password - give it a name - eg \[dq]rclone\[dq]
|
||||||
|
.IP \[bu] 2
|
||||||
|
Copy the password and use this password below - your normal login
|
||||||
|
password won\[aq]t work.
|
||||||
|
.PP
|
||||||
|
Now run
|
||||||
.IP
|
.IP
|
||||||
.nf
|
.nf
|
||||||
\f[C]
|
\f[C]
|
||||||
|
@ -44244,6 +44356,10 @@ User name (usually email)
|
||||||
Enter a string value. Press Enter for the default (\[dq]\[dq]).
|
Enter a string value. Press Enter for the default (\[dq]\[dq]).
|
||||||
user> username\[at]mail.ru
|
user> username\[at]mail.ru
|
||||||
Password
|
Password
|
||||||
|
|
||||||
|
This must be an app password - rclone will not work with your normal
|
||||||
|
password. See the Configuration section in the docs for how to make an
|
||||||
|
app password.
|
||||||
y) Yes type in my own password
|
y) Yes type in my own password
|
||||||
g) Generate random password
|
g) Generate random password
|
||||||
y/g> y
|
y/g> y
|
||||||
|
@ -44441,6 +44557,11 @@ Required: true
|
||||||
.PP
|
.PP
|
||||||
Password.
|
Password.
|
||||||
.PP
|
.PP
|
||||||
|
This must be an app password - rclone will not work with your normal
|
||||||
|
password.
|
||||||
|
See the Configuration section in the docs for how to make an app
|
||||||
|
password.
|
||||||
|
.PP
|
||||||
\f[B]NB\f[R] Input to this must be obscured - see rclone
|
\f[B]NB\f[R] Input to this must be obscured - see rclone
|
||||||
obscure (https://rclone.org/commands/rclone_obscure/).
|
obscure (https://rclone.org/commands/rclone_obscure/).
|
||||||
.PP
|
.PP
|
||||||
|
@ -56024,6 +56145,93 @@ Options:
|
||||||
.IP \[bu] 2
|
.IP \[bu] 2
|
||||||
\[dq]error\[dq]: return an error based on option value
|
\[dq]error\[dq]: return an error based on option value
|
||||||
.SH Changelog
|
.SH Changelog
|
||||||
|
.SS v1.60.1 - 2022-11-17
|
||||||
|
.PP
|
||||||
|
See commits (https://github.com/rclone/rclone/compare/v1.60.0...v1.60.1)
|
||||||
|
.IP \[bu] 2
|
||||||
|
Bug Fixes
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
lib/cache: Fix alias backend shutting down too soon (Nick Craig-Wood)
|
||||||
|
.IP \[bu] 2
|
||||||
|
wasm: Fix walltime link error by adding up-to-date wasm_exec.js
|
||||||
|
(Jo\[~a]o Henrique Franco)
|
||||||
|
.IP \[bu] 2
|
||||||
|
docs
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Update faq.md with bisync (Samuel Johnson)
|
||||||
|
.IP \[bu] 2
|
||||||
|
Corrected download links in windows install docs (coultonluke)
|
||||||
|
.IP \[bu] 2
|
||||||
|
Add direct download link for windows arm64 (albertony)
|
||||||
|
.IP \[bu] 2
|
||||||
|
Remove link to rclone slack as it is no longer supported (Nick
|
||||||
|
Craig-Wood)
|
||||||
|
.IP \[bu] 2
|
||||||
|
Faq: how to use a proxy server that requires a username and password
|
||||||
|
(asdffdsazqqq)
|
||||||
|
.IP \[bu] 2
|
||||||
|
Oracle-object-storage: doc fix (Manoj Ghosh)
|
||||||
|
.IP \[bu] 2
|
||||||
|
Fix typo \f[C]remove\f[R] in rclone_serve_restic command (Joda
|
||||||
|
St\[:o]\[ss]er)
|
||||||
|
.IP \[bu] 2
|
||||||
|
Fix character that was incorrectly interpreted as markdown (Cl\['e]ment
|
||||||
|
Notin)
|
||||||
|
.RE
|
||||||
|
.RE
|
||||||
|
.IP \[bu] 2
|
||||||
|
VFS
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Fix deadlock caused by cache cleaner and upload finishing (Nick
|
||||||
|
Craig-Wood)
|
||||||
|
.RE
|
||||||
|
.IP \[bu] 2
|
||||||
|
Local
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Clean absolute paths (albertony)
|
||||||
|
.IP \[bu] 2
|
||||||
|
Fix -L/--copy-links with filters missing directories (Nick Craig-Wood)
|
||||||
|
.RE
|
||||||
|
.IP \[bu] 2
|
||||||
|
Mailru
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Note that an app password is now needed (Nick Craig-Wood)
|
||||||
|
.IP \[bu] 2
|
||||||
|
Allow timestamps to be before the epoch 1970-01-01 (Nick Craig-Wood)
|
||||||
|
.RE
|
||||||
|
.IP \[bu] 2
|
||||||
|
S3
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Add provider quirk \f[C]--s3-might-gzip\f[R] to fix corrupted on
|
||||||
|
transfer: sizes differ (Nick Craig-Wood)
|
||||||
|
.IP \[bu] 2
|
||||||
|
Allow Storj to server side copy since it seems to work now (Nick
|
||||||
|
Craig-Wood)
|
||||||
|
.IP \[bu] 2
|
||||||
|
Fix for unchecked err value in s3 listv2 (Aaron Gokaslan)
|
||||||
|
.IP \[bu] 2
|
||||||
|
Add additional Wasabi locations (techknowlogick)
|
||||||
|
.RE
|
||||||
|
.IP \[bu] 2
|
||||||
|
Smb
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Fix \f[C]Failed to sync: context canceled\f[R] at the end of syncs (Nick
|
||||||
|
Craig-Wood)
|
||||||
|
.RE
|
||||||
|
.IP \[bu] 2
|
||||||
|
WebDAV
|
||||||
|
.RS 2
|
||||||
|
.IP \[bu] 2
|
||||||
|
Fix Move/Copy/DirMove when using -server-side-across-configs (Nick
|
||||||
|
Craig-Wood)
|
||||||
|
.RE
|
||||||
.SS v1.60.0 - 2022-10-21
|
.SS v1.60.0 - 2022-10-21
|
||||||
.PP
|
.PP
|
||||||
See commits (https://github.com/rclone/rclone/compare/v1.59.0...v1.60.0)
|
See commits (https://github.com/rclone/rclone/compare/v1.59.0...v1.60.0)
|
||||||
|
@ -67037,10 +67245,8 @@ significant amount of metadata, which breaks the desired 1:1 mapping of
|
||||||
files to objects.
|
files to objects.
|
||||||
.SS Can rclone do bi-directional sync?
|
.SS Can rclone do bi-directional sync?
|
||||||
.PP
|
.PP
|
||||||
No, not at present.
|
Yes, since rclone v1.58.0, bidirectional cloud
|
||||||
rclone only does uni-directional sync from A -> B.
|
sync (https://rclone.org/bisync/) is available.
|
||||||
It may do in the future though since it has all the primitives - it just
|
|
||||||
requires writing the algorithm to do it.
|
|
||||||
.SS Can I use rclone with an HTTP proxy?
|
.SS Can I use rclone with an HTTP proxy?
|
||||||
.PP
|
.PP
|
||||||
Yes.
|
Yes.
|
||||||
|
@ -67073,6 +67279,17 @@ export HTTPS_PROXY=$http_proxy
|
||||||
\f[R]
|
\f[R]
|
||||||
.fi
|
.fi
|
||||||
.PP
|
.PP
|
||||||
|
Note: If the proxy server requires a username and password, then use
|
||||||
|
.IP
|
||||||
|
.nf
|
||||||
|
\f[C]
|
||||||
|
export http_proxy=http://username:password\[at]proxyserver:12345
|
||||||
|
export https_proxy=$http_proxy
|
||||||
|
export HTTP_PROXY=$http_proxy
|
||||||
|
export HTTPS_PROXY=$http_proxy
|
||||||
|
\f[R]
|
||||||
|
.fi
|
||||||
|
.PP
|
||||||
The \f[C]NO_PROXY\f[R] allows you to disable the proxy for specific
|
The \f[C]NO_PROXY\f[R] allows you to disable the proxy for specific
|
||||||
hosts.
|
hosts.
|
||||||
Hosts must be comma separated, and can contain domains or parts.
|
Hosts must be comma separated, and can contain domains or parts.
|
||||||
|
|
|
@ -590,20 +590,25 @@ func (item *Item) _store(ctx context.Context, storeFn StoreFn) (err error) {
|
||||||
item._updateFingerprint()
|
item._updateFingerprint()
|
||||||
}
|
}
|
||||||
|
|
||||||
item.info.Dirty = false
|
// Write the object back to the VFS layer before we mark it as
|
||||||
err = item._save()
|
// clean, otherwise it will become eligible for removal which
|
||||||
if err != nil {
|
// can cause a deadlock
|
||||||
fs.Errorf(item.name, "vfs cache: failed to write metadata file: %v", err)
|
|
||||||
}
|
|
||||||
if storeFn != nil && item.o != nil {
|
if storeFn != nil && item.o != nil {
|
||||||
fs.Debugf(item.name, "vfs cache: writeback object to VFS layer")
|
fs.Debugf(item.name, "vfs cache: writeback object to VFS layer")
|
||||||
// Write the object back to the VFS layer as last
|
// Write the object back to the VFS layer last with mutex unlocked
|
||||||
// thing we do with mutex unlocked
|
|
||||||
o := item.o
|
o := item.o
|
||||||
item.mu.Unlock()
|
item.mu.Unlock()
|
||||||
storeFn(o)
|
storeFn(o)
|
||||||
item.mu.Lock()
|
item.mu.Lock()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Show item is clean and is elegible for cache removal
|
||||||
|
item.info.Dirty = false
|
||||||
|
err = item._save()
|
||||||
|
if err != nil {
|
||||||
|
fs.Errorf(item.name, "vfs cache: failed to write metadata file: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue