Compare commits

...
Sign in to create a new pull request.

61 commits

Author SHA1 Message Date
Nick Craig-Wood
729799af7c Version v1.52.3 2020-08-07 16:26:55 +01:00
Nick Craig-Wood
029f817ebc drive: stop using root_folder_id as a cache #4419
Previous to this change rclone cached the looked up root_folder_id in
the root_folder_id config variable.

This has caused a lot of confusion and a few attempts at workarounds
and ultimately was a mistake.

This reverts rclone attempting to cache anything in root_folder_id and
returns that variable to be entirely user modified.

It gives a little hint in the debug that rclone could be sped up
slightly by setting it, but it is up to the user to think about
whether that would be OK or not.

    Google drive root '': root_folder_id = "XXX" - save this in the config to speed up startup

It does not change root_folder_id itself, leaving this to the user.

See: https://forum.rclone.org/t/rclone-gdrive-no-longer-returning-anything/17215
2020-08-02 11:52:04 +01:00
Nick Craig-Wood
073e996cc2 docs: update install from source instructions
This has changed post Go modules.

In particular it recommends against the go get `-u` flag.

See: https://forum.rclone.org/t/install-from-source-go-get-errors/18114
2020-07-27 11:50:33 +01:00
Nick Craig-Wood
fb2a4edd6f drive: drop "Disabling ListR" messages down to debug
This was causing unecessary anguish for users since these messages are
harmless and really only interesting for debugging.

See: https://forum.rclone.org/t/rclone-gdrive-error/18098
2020-07-25 16:51:28 +01:00
Nick Craig-Wood
f949856170 sync: fix deadlock with --track-renames-strategy modtime - fixes #4427
Before this change we could exit the popRenameMap function with the
lock held.

This fixes the problem by defer-ring the unlock.

See: https://forum.rclone.org/t/track-renames-strategy-modtime-doesnt-work/16992
2020-07-17 17:10:51 +01:00
Dmitry Ustalov
c0e9584403 docs: workaround and policy for Google Drive API
* workaround for Google Drive API
* mention the use of Google User Data
* unified wording for user data policy
2020-07-15 23:15:01 +01:00
Evan Harris
ace56b6e0f docs: Update install.md to reflect minimum Go version
Fixes #3765
2020-07-15 23:00:35 +01:00
Nick Craig-Wood
1d45c6eaaa ftp: add note to docs about home vs root directory selection
See: https://forum.rclone.org/t/update-docs-for-ftp-path-absolute-vs-relative/17875
2020-07-15 15:28:22 +01:00
Morten Linderud
e8222bbc95 make_manual: Support SOURCE_DATE_EPOCH
The documentation contains an embedded datetime which do not read
SOURCE_DATE_EPOCH. This makes the documentation unreproducible when
distribution tries to recreate previous build of the package.

This patch ensures we attempt to read the environment variable before
default to the current build time.

Signed-off-by: Morten Linderud <morten@linderud.pw>
2020-07-15 14:55:38 +01:00
Kevin
815643264b Avoid comma rendered in URL in onedrive.md (#4438)
Removed comma from the end of the Azure AD Applications List Blade URL since it was not resolving and customers were opening up support tickets with the Microsoft Azure AD team.
2020-07-15 14:55:36 +01:00
Nick Craig-Wood
4f8472664f s3: fix bucket Region auto detection when Region unset in config #2915
Previous to this fix if Region was not set and Endpoint was not set
then we set the endpoint to "https://s3.amazonaws.com/".

This is unecessary because if the Region alone isn't set then we set
it to "us-east-1" which has the same endpoint.

Having the endpoint set breaks the bucket region auto detection with
the error "Failed to update region for bucket: can't set region to
"xxx" as endpoint is set".

This fix removes that check.
2020-07-10 17:17:24 +01:00
Nick Craig-Wood
3278b297cf pcloud: fix oauth on European region "eapi.pcloud.com"
Pcloud appears to have opened up a new region and they are returning
the hostname in the oauth callback, thus

    GET /?code=XXX&locationid=1&hostname=api.pcloud.com&state=XXX HTTP/1.1
    GET /?code=XXX&locationid=2&hostname=eapi.pcloud.com&state=XXX HTTP/1.1

This isn't documented yet, however pCloud have confirmed that this is
the correct interpretation.

Rclone now reads the "hostname" parameter in the oauth callback and
stores it in the config file. It uses it for all subequent API calls.
2020-07-03 20:40:14 +01:00
Nick Craig-Wood
5c0af62d0a drive: make dangling shortcuts appear in listings
Previous to this a dangling shortcut would error the directory
listing.

This patch makes dangling shortcuts appear as 0 sized objects in the
directory listing so they can be deleted. These objects can't be read
though.
2020-07-03 20:00:13 +01:00
Nick Craig-Wood
6760ab6bb3 fs/cache: fix moveto/copyto remote:file remote:file2
Before this change, if the cache was given a source `remote:file` it
stored `remote:` with the error `fs.ErrorIsFile` attached. This meant
that if it `remote:` was subsequently looked up it would return the
`fs.ErrorIsFile` error.

This broke `moveto remote:file remote:file2` as moveto would lookup
`remote:` from the second argument and erroneously get the
`fs.ErrorIsFile` error.

This likely broke other commands too.

This was broken in

4c9836035 fs/cache: Add Pin and Unpin and canonicalised lookup

Which was released in v1.52.0

The fix is to make a new cache entry for `remote:` with no error
attached in the case that the original call returned `fs.ErrorIsFile`.
2020-07-02 10:55:59 +01:00
Nick Craig-Wood
a9ffa1178c onedrive: Fix reverting to Copy when Move would have worked
For some objects the onedrive backend has been doing a server side
copy and a delete when a server side move would have worked OK.

This was caused by not detecting the home drive correctly (when it was
an empty string) and assuming that these transfers were cross drive.

This is fixed by comparing canonicalizing drive IDs before comparing them.
2020-07-02 10:55:58 +01:00
Nick Craig-Wood
687865f760 log: fix --use-json-log going to stderr not --log-file on Windows - fixes #4367 2020-07-01 20:48:46 +01:00
Nick Craig-Wood
d745bc1baa drive: Allow the use of --drive-impersonate with the root_folder_id "appDataFolder"
In this commit

5c5ad6220 drive: fix --drive-impersonate with cached root_folder_id

We disabled the use of root_folder_id with --drive-impersonate to fix
a problem with a cached root_folder_id giving the wrong results.

This, alas, broke one users setup with a root_folder_id of
appDataFolder. Since this is identifiable and definitely couldn't have
been cached, we can safely skip this check in this case.

See: https://forum.rclone.org/t/rclone-gdrive-no-longer-returning-anything/17215/10
2020-06-25 21:45:09 +01:00
Nick Craig-Wood
1f279f0419 doc: disable smart typography (eg en-dash) in MANUAL.* and man page
Before this change MANUAL.html and rclone.1 would show flags like –addr

Now it shows --addr which is easy to copy and paste.

This was pointed out in #4362
2020-06-25 12:17:08 +01:00
Matteo Pietro Dazzi
d805e63f7d serve dlna: Fix file list on Samsung Series 6+ TVs
This fixes the command "serve dlna" in order correctly show the list
of files on Samsung TV models starting from Series 6.
2020-06-25 09:51:57 +01:00
Nick Craig-Wood
d8144a7e84 Version v1.52.2 2020-06-24 13:49:00 +01:00
Nick Craig-Wood
21f5b1076f swift: speed up deletes by not retrying segment container deletes
Before this fix rclone would continually try to delete non empty
segment containers which made deleting lots of files very slow.

This fix makes rclone just try the delete once and then carry on which
was the original intent of the code before the retry logic got put in.
2020-06-24 13:09:42 +01:00
Nick Craig-Wood
a8cee91929 check: Fix misleading message which printed errors instead of differences
See: https://forum.rclone.org/t/tons-of-data-corruption-after-rclone-copy-to-mega-can-rclone-correct-it/17017/7
2020-06-24 13:09:03 +01:00
Nick Craig-Wood
14edaefaa3 mount2,cmount: skip unreliable tests #4171 2020-06-24 13:06:58 +01:00
Nick Craig-Wood
946b73c5fe test: Don't run unreliable tests on CI #4171 2020-06-24 13:06:53 +01:00
Nick Craig-Wood
07f7854a25 testy: test utility functions 2020-06-24 13:06:49 +01:00
Caleb Case
dfc7393e9c backend/tardigrade: Upgrade to uplink v1.1.1
This fixes issue #4370 by restoring the correct error response.
2020-06-20 16:47:18 +01:00
Nick Craig-Wood
7f50143805 webdav: Fix free/used display for rclone about/df for certain backends - fixes #4348
Before this change if the server sent us xml like this

```
<D:propstat>
<D:prop>
<g0:quota-available-bytes/>
<g0:quota-used-bytes/>
</D:prop>
<D:status>HTTP/1.1 404 Not Found</D:status>
</D:propstat>
```

Rclone would read the empty XML items as containing 0

After this fix we make sure that we have a value before using it.
2020-06-20 15:16:14 +01:00
Nick Craig-Wood
37308832b1 drive: fix --drive-impersonate with cached root_folder_id
Before this fix rclone v1.51 and 1.52 would incorrectly use the cached
root_folder_id when the --drive-impersonate flag was in use. This
meant that rclone could be looking up the wrong directory ID with
unpredictable results - usually all files apparently being missing.

This fix makes rclone look up the root_folder_id always when using
--drive-impersonate. It does this by clearing the root_folder_id and
making a NOTICE message that it is ignoring the cached value.

It also stops rclone caching the root_folder_id when using
--drive-impersonate.

See: https://forum.rclone.org/t/rclone-gdrive-no-longer-returning-anything/17215
2020-06-20 15:03:01 +01:00
Nick Craig-Wood
d5d124c9ee drive: fix creating a directory inside a shortcut
See: https://forum.rclone.org/t/cant-create-new-directory-on-google-drive-remote/17208
2020-06-18 11:16:40 +01:00
NoLooseEnds
8b1f737271 build: fix custom timezone in Docker image
Added the tzdata package to fix this ref. 

See: https://forum.rclone.org/t/rclone-in-docker-uses-tz-as-utc-not-as-provided/17173
2020-06-17 15:29:46 +01:00
Nick Craig-Wood
ed013228ea errors: add WSAECONNREFUSED and more to the list of retriable Windows errors
This adds the missing WSAECONNREFUSED error to the list of errors we
can retry under Windows.

> Connection refused.  No connection could be made because the target
> computer actively refused it.

It also adds any relevant errors I could see in the error code list.

See: https://forum.rclone.org/t/failing-to-upload-large-file-to-b2/17085
2020-06-17 10:46:37 +01:00
Gary Kim
a9b7974196 rcd: fix incorrect prometheus metrics - fixes #4341
This was caused by using the stats group from the context passed in by the rcd
rather than the global stats group.

Signed-off-by: Gary Kim <gary@garykim.dev>
2020-06-14 10:11:43 +01:00
Zac Rubin
38453bd8ff sftp: Fix SSH key PEM loading
For SSH authentication, `key_pem` should both override `key_file`
and not require other SSH authentication methods to be set.

Prior to this fix, rclone would attempt to use an ssh-agent
when `key_pem` was the only SSH authentication method set.

Fixes #4240
2020-06-13 11:51:10 +01:00
Nick Craig-Wood
51ba73afe4 sync: fix --track-renames-strategy modtime
Before this change `--track-renames-strategy` was broken. The hashing
method it used could declare times that were very close together to be
different.

The time hash was discarded and instead we check the modification time
window on every hash match.

Provided that the user doesn't use `--track-renames-strategy` on a
huge number of identically sized files this will perform just fine.

See: https://forum.rclone.org/t/track-renames-strategy-modtime-doesnt-work/16992/5
2020-06-12 15:39:18 +01:00
Nick Craig-Wood
b782a15f17 drive: fix not being able to delete a directory with a trashed shortcut
When we resolve the shortcut we now propagate the trashed status of
the shortcut into the resolved item which fixes the issue.
2020-06-12 15:12:02 +01:00
Nick Craig-Wood
1d2edf0789 serve webdav,serve restic: Fix flags so they use environment variables
See: https://forum.rclone.org/t/serve-restic-append-only-environment-variable/17050
2020-06-11 19:29:41 +01:00
Nick Craig-Wood
8367261a93 build: fix docker release build action 2020-06-10 16:51:37 +01:00
Nick Craig-Wood
31dc78905e Version v1.52.1 2020-06-10 16:08:06 +01:00
Nick Craig-Wood
f9493ff1db build: set user_allow_other in /etc/fuse.conf in the Docker image
This allows non root mounts to use the --allow-other flag

See: https://forum.rclone.org/t/trying-utilize-docker-for-the-first-time-having-some-issues-with-an-rclone-mount-user-allow-other-error-etc-fuse-conf-has-been-updated-to-allow/16393
2020-06-10 15:51:24 +01:00
Nick Craig-Wood
a5cf531b94 s3: fix --header-upload - Fixes #4303
Before this change we were setting the headers on the PUT
request for normal and multipart uploads. For normal uploads this caused the error

    403 Forbidden: There were headers present in the request which were not signed

After this fix we set the headers in the object upload request itself
as the s3 SDK expects.

This means that we only support a limited range of headers

- Cache-Control
- Content-Disposition
- Content-Encoding
- Content-Language
- Content-Type
- X-Amz-Tagging
- X-Amz-Meta-

Note for the last of those are for setting custom metadata in the form
"X-Amz-Meta-Key: value".

This now works for multipart uploads and single part uploads

See also #59
2020-06-10 12:29:23 +01:00
Nick Craig-Wood
04d59fe6bd lib/structs: factor reflection based structure manipulation into a library 2020-06-10 12:29:23 +01:00
Cenk Alti
cbc448039d putio: fix panic on Object.Open #4315 2020-06-10 12:22:07 +01:00
Caleb Case
7a8ade4949 backend/tardigrade: Set UserAgent to rclone
This provides two things:

* It gives Storj insight into which uplink clients are using the
  network.
* It facilitate rclone participating in the Tardigrade Open Source
  Partner Program https://tardigrade.io/partner/
2020-06-09 20:17:06 +01:00
Nick Craig-Wood
8ab6e2bd1f lib/file: fix SetSparse on Windows 7 which fixes downloads of files > 250MB
Before this change we passed both lpOverlapped and lpBytesReturned as NULL.

> If lpOverlapped is NULL, lpBytesReturned cannot be NULL. Even when
> an operation produces no output data, and lpOutBuffer can be NULL,
> the DeviceIoControl function makes use of the variable pointed to by
> lpBytesReturned. After such an operation, the value of the variable
> is without meaning.

After this change we set lpBytesReturned to a valid pointer.

See: https://forum.rclone.org/t/errors-when-downloading-any-file-over-250mb-from-google-drive-windows-sparse-files/16889
2020-06-06 13:14:10 +01:00
Nick Craig-Wood
d5c5811a54 obscure: write more help as we are referencing it elsewhere 2020-06-05 12:49:12 +01:00
Caleb Case
43d21b7e64 backend/tardigrade: Upgrade uplink to v1.0.7
This fixes a regression in the rclone tests from the v1.0.6 upgrade of
uplink. The failure was due to an improperly converted error resulting
in the wrong type of error.
2020-06-05 10:52:12 +01:00
Nick Craig-Wood
0501b12e17 vfs: fix OS vs Unix path confusion - fixes ChangeNotify on Windows
See: https://forum.rclone.org/t/windows-mount-polling-not-recognising-all-changes-made-by-another-box/16708
2020-06-03 17:07:04 +01:00
Nick Craig-Wood
723c1dfdc5 s3: fix upload of single files into buckets without create permission
Before this change, attempting to upload a single file into an s3
bucket which did not have create permission gave AccessDenied: Access
Denied error when it tried to create the bucket.

This was masked until e2bf91452a was
fixed.

This fix marks the bucket as OK if a fetch on an object indicates it
is OK. This stops rclone thinking it has to create the bucket in the
first place.

Fixes #4297
2020-06-02 20:06:34 +01:00
Nick Craig-Wood
d6894408b9 build: fix xgo build after go1.14 go.mod update
Before this change xgo was getting added to go.mod - the build then failed with

    go: inconsistent vendoring in /usr/src/rclone:
    github.com/karalabe/xgo@v0.0.0-20191115072854-c5ccff8648a7: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt

This change gets xgo in GOPATH mode to avoid it getting added to go.mod
2020-06-02 14:02:44 +01:00
Nick Craig-Wood
ac0e831090 docs: remove leading slash in page reference in footer when present 2020-06-02 12:10:30 +01:00
edwardxml
b93ed77495 docs: minor tense, punctuation, brevity and positivity changes for the home page 2020-06-01 16:47:21 +01:00
Nick Craig-Wood
d0a3c40f9a build: update Docker build workflows
- prune docker images to ones we normally build binaries for
- add fixed versions
- add fetch-depth to fetch the tags so the version number is correct
- rename the job names
2020-06-01 16:47:21 +01:00
Matteo Pietro Dazzi
6a9a571d87 build: Build Docker images with GitHub actions 2020-06-01 16:47:21 +01:00
Nick Craig-Wood
6b68d1f79a build: remove quicktest from Dockerfile
This is making docker builds take too long and it isn't the place of
the Docker file to be running unit tests.
2020-06-01 16:47:21 +01:00
Nick Craig-Wood
088756ff8a build: update go.mod to go1.14 to enable -mod=vendor build
When the main module contains a top-level vendor directory and its
go.mod file specifies go 1.14 or higher, the go command now defaults
to -mod=vendor for operations that accept that flag.
2020-06-01 16:47:21 +01:00
Nick Craig-Wood
4c1ffcc36d docs: remove manually set dates and use git dates instead 2020-06-01 13:10:08 +01:00
Nick Craig-Wood
e5bd3f1c26 docs: Add link to source and modified time to footer of every page 2020-06-01 13:09:58 +01:00
Nick Craig-Wood
e03b4e2ce9 cmd: Note commands which need obscured input in the docs - fixes #4252 2020-05-31 12:59:29 +01:00
Nick Craig-Wood
6054476c9c drive: fix missing items when listing using --fast-list / ListR
This is caused by a bug in Google drive where, in some circumstances
querying for "(A in parents) or (B in parents)" returns nothing
whereas querying for "A in parents" and "B in parents" separately
works fine.

This has been reported here:

https://issuetracker.google.com/issues/149522397

This workaround detects this condition by seeing if a listing for more
than one directory at once returns nothing.

If it does then it retries each one individually.

This can potentially have a false positive if the user has multiple
empty directories which are queried at once. The consequence of this
will be that ListR is disabled for a while until the directories are
found to be actually empty in which case it will be re-enabled.

Fixes #3114 and Fixes #4289
2020-05-31 11:45:24 +01:00
Caleb Case
6cd8d3c4a0 backend/tardigrade: Upgrade to uplink v1.0.6
This fixes an important bug with listing that affects users with more
than 500 objects in a listing operation.
2020-05-29 18:01:20 +01:00
Nick Craig-Wood
78b0329928 mountlib: fix rc tests when mount does not work
This fixed the Docker 1.52 build
2020-05-28 13:13:02 +01:00
450 changed files with 24030 additions and 101236 deletions

View file

@ -227,7 +227,7 @@ jobs:
- name: Cross-compile rclone
run: |
docker pull billziss/xgo-cgofuse
go get -v github.com/karalabe/xgo
GO111MODULE=off go get -v github.com/karalabe/xgo # don't add to go.mod
xgo \
-image=billziss/xgo-cgofuse \
-targets=darwin/386,darwin/amd64,linux/386,linux/amd64,windows/386,windows/amd64 \

View file

@ -0,0 +1,25 @@
name: Docker beta build
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
name: Build image job
steps:
- name: Checkout master
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Build and publish image
uses: ilteoood/docker_buildx@439099796bfc03dd9cedeb72a0c7cb92be5cc92c
with:
tag: beta
imageName: rclone/rclone
platform: linux/amd64,linux/386,linux/arm64,linux/arm/v7
publish: true
dockerHubUser: ${{ secrets.DOCKER_HUB_USER }}
dockerHubPassword: ${{ secrets.DOCKER_HUB_PASSWORD }}

View file

@ -0,0 +1,33 @@
name: Docker release build
on:
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
name: Build image job
steps:
- name: Checkout master
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Get actual patch version
id: actual_patch_version
run: echo ::set-output name=ACTUAL_PATCH_VERSION::$(echo $GITHUB_REF | cut -d / -f 3 | sed 's/v//g')
- name: Get actual minor version
id: actual_minor_version
run: echo ::set-output name=ACTUAL_MINOR_VERSION::$(echo $GITHUB_REF | cut -d / -f 3 | sed 's/v//g' | cut -d "." -f 1,2)
- name: Get actual major version
id: actual_major_version
run: echo ::set-output name=ACTUAL_MAJOR_VERSION::$(echo $GITHUB_REF | cut -d / -f 3 | sed 's/v//g' | cut -d "." -f 1)
- name: Build and publish image
uses: ilteoood/docker_buildx@439099796bfc03dd9cedeb72a0c7cb92be5cc92c
with:
tag: latest,${{ steps.actual_patch_version.outputs.ACTUAL_PATCH_VERSION }},${{ steps.actual_minor_version.outputs.ACTUAL_MINOR_VERSION }},${{ steps.actual_major_version.outputs.ACTUAL_MAJOR_VERSION }}
imageName: rclone/rclone
platform: linux/amd64,linux/386,linux/arm64,linux/arm/v7
publish: true
dockerHubUser: ${{ secrets.DOCKER_HUB_USER }}
dockerHubPassword: ${{ secrets.DOCKER_HUB_PASSWORD }}

View file

@ -3,7 +3,6 @@ FROM golang AS builder
COPY . /go/src/github.com/rclone/rclone/
WORKDIR /go/src/github.com/rclone/rclone/
RUN make quicktest
RUN \
CGO_ENABLED=0 \
make
@ -12,7 +11,8 @@ RUN ./rclone version
# Begin final image
FROM alpine:latest
RUN apk --no-cache add ca-certificates fuse
RUN apk --no-cache add ca-certificates fuse tzdata && \
echo "user_allow_other" >> /etc/fuse.conf
COPY --from=builder /go/src/github.com/rclone/rclone/rclone /usr/local/bin/

3877
MANUAL.html generated

File diff suppressed because it is too large Load diff

246
MANUAL.md generated
View file

@ -1,15 +1,15 @@
% rclone(1) User Manual
% Nick Craig-Wood
% May 27, 2020
% Aug 07, 2020
# Rclone syncs your files to cloud storage
<img width="50%" src="https://rclone.org/img/logo_on_light__horizontal_color.svg" alt="rclone logo" style="float:right; padding: 5px;" >
- [About rclone](#about)
- [What can rclone do for you](#what)
- [What features does rclone have](#features)
- [What providers does rclone support](#providers)
- [What can rclone do for you?](#what)
- [What features does rclone have?](#features)
- [What providers does rclone support?](#providers)
- [Download](https://rclone.org/downloads/)
- [Install](https://rclone.org/install/)
- [Donate.](https://rclone.org/donate/)
@ -24,20 +24,20 @@ services, as well as standard transfer protocols.
Rclone has powerful cloud equivalents to the unix commands rsync, cp,
mv, mount, ls, ncdu, tree, rm, and cat. Rclone's familiar syntax
includes shell pipeline support, and `--dry-run` protection. It can be
includes shell pipeline support, and `--dry-run` protection. It is
used at the command line, in scripts or via its [API](/rc).
Users have called rclone *"The Swiss army knife of cloud storage"* and
Users call rclone *"The Swiss army knife of cloud storage"*, and
*"Technology indistinguishable from magic"*.
Rclone really looks after your data. It preserves timestamps and
verifies your data at all times. Transfers over limited bandwidth;
verifies checksums at all times. Transfers over limited bandwidth;
intermittent connections, or subject to quota can be restarted, from
the last good file transferred. You can
[check](https://rclone.org/commands/rclone_check/) the integrity of your files. Where
possible, rclone employs server side transfers to minimise local
bandwidth use and transfers from one provider to another without
using your local disk.
using local disk.
Virtual backends wrap local and cloud file systems to apply
[encryption](https://rclone.org/crypt/),
@ -45,9 +45,9 @@ Virtual backends wrap local and cloud file systems to apply
[chunking](https://rclone.org/chunker/) and
[joining](https://rclone.org/union/).
Rclone can [mount](https://rclone.org/commands/rclone_mount/) any local, cloud or
Rclone [mounts](https://rclone.org/commands/rclone_mount/) any local, cloud or
virtual filesystem as a disk on Windows,
macOS, linux and FreeBSD, and also serve these over
macOS, linux and FreeBSD, and also serves these over
[SFTP](https://rclone.org/commands/rclone_serve_sftp/),
[HTTP](https://rclone.org/commands/rclone_serve_http/),
[WebDAV](https://rclone.org/commands/rclone_serve_webdav/),
@ -61,14 +61,14 @@ Fedora, Brew and Chocolatey repos. include rclone. For the latest
version [downloading from rclone.org](https://rclone.org/downloads/) is recommended.
Rclone is widely used on Linux, Windows and Mac. Third party
developers have built innovative backup, restore, GUI and business
developers create innovative backup, restore, GUI and business
process solutions using the rclone command line or API.
Let rclone do the heavy lifting of communicating with cloud storage.
Rclone does the heavy lifting of communicating with cloud storage.
## What can rclone do for you {#what}
## What can rclone do for you? {#what}
Rclone can help you:
Rclone helps you:
- Backup (and encrypt) files to cloud storage
- Restore (and decrypt) files from cloud storage
@ -96,7 +96,7 @@ Rclone can help you:
## Supported providers {#providers}
(There are many other providers, built on standard protocols such as
(There are many others, built on standard protocols such as
WebDAV or S3, that work out of the box.)
@ -330,7 +330,7 @@ kill %1
## Install from source ##
Make sure you have at least [Go](https://golang.org/) 1.7
Make sure you have at least [Go](https://golang.org/) 1.10
installed. [Download go](https://golang.org/dl/) if necessary. The
latest release is recommended. Then
@ -339,16 +339,23 @@ latest release is recommended. Then
go build
./rclone version
You can also build and install rclone in the
[GOPATH](https://github.com/golang/go/wiki/GOPATH) (which defaults to
`~/go`) with:
This will leave you a checked out version of rclone you can modify and
send pull requests with. If you use `make` instead of `go build` then
the rclone build will have the correct version information in it.
go get -u -v github.com/rclone/rclone
You can also build the latest stable rclone with:
and this will build the binary in `$GOPATH/bin` (`~/go/bin/rclone` by
default) after downloading the source to
`$GOPATH/src/github.com/rclone/rclone` (`~/go/src/github.com/rclone/rclone`
by default).
go get github.com/rclone/rclone
or the latest version (equivalent to the beta) with
go get github.com/rclone/rclone@master
These will build the binary in `$(go env GOPATH)/bin`
(`~/go/bin/rclone` by default) after downloading the source to the go
module cache. Note - do **not** use the `-u` flag here. This causes go
to try to update the depencencies that rclone uses and sometimes these
don't work with the current version of rclone.
## Installation with Ansible ##
@ -3126,11 +3133,24 @@ See the [global flags page](https://rclone.org/flags/) for global options not li
# rclone obscure
Obscure password for use in the rclone.conf
Obscure password for use in the rclone config file
## Synopsis
Obscure password for use in the rclone.conf
In the rclone config file, human readable passwords are
obscured. Obscuring them is done by encrypting them and writing them
out in base64. This is **not** a secure way of encrypting these
passwords as rclone can decrypt them - it is to prevent "eyedropping"
- namely someone seeing a password in the rclone config file by
accident.
Many equally important things (like access tokens) are not obscured in
the config file. However it is very hard to shoulder surf a 64
character hex token.
If you want to encrypt the config file then please use config file
encryption - see [rclone config](https://rclone.org/commands/rclone_config/) for more
info.
```
rclone obscure password [flags]
@ -9670,7 +9690,7 @@ These flags are available for every command.
--use-json-log Use json log format.
--use-mmap Use mmap allocator (see docs).
--use-server-modtime Use server modified time instead of object metadata
--user-agent string Set the user-agent to a specified string. The default is rclone/ version (default "rclone/v1.52.0")
--user-agent string Set the user-agent to a specified string. The default is rclone/ version (default "rclone/v1.52.3")
-v, --verbose count Print lots more stuff (repeat for more)
```
@ -9731,7 +9751,7 @@ and may be set in the config file.
--cache-db-wait-time Duration How long to wait for the DB to be available - 0 is unlimited (default 1s)
--cache-info-age Duration How long to cache file structure information (directory listings, file size, times etc). (default 6h0m0s)
--cache-plex-insecure string Skip all certificate verification when connecting to the Plex server
--cache-plex-password string The password of the Plex user
--cache-plex-password string The password of the Plex user (obscured)
--cache-plex-url string The URL of the Plex server
--cache-plex-username string The username of the Plex user
--cache-read-retries int How many times to retry a read from a cache storage. (default 10)
@ -9751,8 +9771,8 @@ and may be set in the config file.
-L, --copy-links Follow symlinks and copy the pointed to item.
--crypt-directory-name-encryption Option to either encrypt directory names or leave them intact. (default true)
--crypt-filename-encryption string How to encrypt the filenames. (default "standard")
--crypt-password string Password or pass phrase for encryption.
--crypt-password2 string Password or pass phrase for salt. Optional but recommended.
--crypt-password string Password or pass phrase for encryption. (obscured)
--crypt-password2 string Password or pass phrase for salt. Optional but recommended. (obscured)
--crypt-remote string Remote to encrypt/decrypt.
--crypt-show-mapping For all files listed show how the names encrypt.
--drive-acknowledge-abuse Set to allow files which return cannotDownloadAbusiveFile to be downloaded.
@ -9803,7 +9823,7 @@ and may be set in the config file.
--ftp-encoding MultiEncoder This sets the encoding for the backend. (default Slash,Del,Ctl,RightSpace,Dot)
--ftp-host string FTP host to connect to
--ftp-no-check-certificate Do not verify the TLS certificate of the server
--ftp-pass string FTP password
--ftp-pass string FTP password (obscured)
--ftp-port string FTP port, leave blank to use default (21)
--ftp-tls Use FTP over TLS (Implicit)
--ftp-user string FTP username, leave blank for current username, $USER
@ -9840,7 +9860,7 @@ and may be set in the config file.
--koofr-encoding MultiEncoder This sets the encoding for the backend. (default Slash,BackSlash,Del,Ctl,InvalidUtf8,Dot)
--koofr-endpoint string The Koofr API endpoint to use (default "https://app.koofr.net")
--koofr-mountid string Mount ID of the mount to use. If omitted, the primary mount is used.
--koofr-password string Your Koofr password for rclone (generate one at https://app.koofr.net/app/admin/preferences/password)
--koofr-password string Your Koofr password for rclone (generate one at https://app.koofr.net/app/admin/preferences/password) (obscured)
--koofr-setmtime Does the backend support setting modification time. Set this to false if you use a mount ID that points to a Dropbox or Amazon Drive backend. (default true)
--koofr-user string Your Koofr user name
-l, --links Translate symlinks to/from regular files with a '.rclonelink' extension
@ -9853,7 +9873,7 @@ and may be set in the config file.
--local-nounc string Disable UNC (long path names) conversion on Windows
--mailru-check-hash What should copy do if file checksum is mismatched or invalid (default true)
--mailru-encoding MultiEncoder This sets the encoding for the backend. (default Slash,LtGt,DoubleQuote,Colon,Question,Asterisk,Pipe,BackSlash,Del,Ctl,InvalidUtf8,Dot)
--mailru-pass string Password
--mailru-pass string Password (obscured)
--mailru-speedup-enable Skip full upload if there is another file with same data hash. (default true)
--mailru-speedup-file-patterns string Comma separated list of file name patterns eligible for speedup (put by hash). (default "*.mkv,*.avi,*.mp4,*.mp3,*.zip,*.gz,*.rar,*.pdf")
--mailru-speedup-max-disk SizeSuffix This option allows you to disable speedup (put by hash) for large files (default 3G)
@ -9862,7 +9882,7 @@ and may be set in the config file.
--mega-debug Output more debug from Mega.
--mega-encoding MultiEncoder This sets the encoding for the backend. (default Slash,InvalidUtf8,Dot)
--mega-hard-delete Delete files permanently rather than putting them into the trash.
--mega-pass string Password.
--mega-pass string Password. (obscured)
--mega-user string User name
-x, --one-file-system Don't cross filesystem boundaries (unix/macOS only).
--onedrive-chunk-size SizeSuffix Chunk size to upload files with - must be multiple of 320k (327,680 bytes). (default 10M)
@ -9875,11 +9895,12 @@ and may be set in the config file.
--onedrive-server-side-across-configs Allow server side operations (eg copy) to work across different onedrive configs.
--opendrive-chunk-size SizeSuffix Files will be uploaded in chunks this size. (default 10M)
--opendrive-encoding MultiEncoder This sets the encoding for the backend. (default Slash,LtGt,DoubleQuote,Colon,Question,Asterisk,Pipe,BackSlash,LeftSpace,LeftCrLfHtVt,RightSpace,RightCrLfHtVt,InvalidUtf8,Dot)
--opendrive-password string Password.
--opendrive-password string Password. (obscured)
--opendrive-username string Username
--pcloud-client-id string Pcloud App Client Id
--pcloud-client-secret string Pcloud App Client Secret
--pcloud-encoding MultiEncoder This sets the encoding for the backend. (default Slash,BackSlash,Del,Ctl,InvalidUtf8,Dot)
--pcloud-hostname string Hostname to connect to. (default "api.pcloud.com")
--pcloud-root-folder-id string Fill in for rclone to use a non root folder as its starting point. (default "d0")
--premiumizeme-encoding MultiEncoder This sets the encoding for the backend. (default Slash,DoubleQuote,BackSlash,Del,Ctl,InvalidUtf8,Dot)
--putio-encoding MultiEncoder This sets the encoding for the backend. (default Slash,BackSlash,Del,Ctl,InvalidUtf8,Dot)
@ -9926,19 +9947,19 @@ and may be set in the config file.
--seafile-create-library Should rclone create a library if it doesn't exist
--seafile-encoding MultiEncoder This sets the encoding for the backend. (default Slash,DoubleQuote,BackSlash,Ctl,InvalidUtf8)
--seafile-library string Name of the library. Leave blank to access all non-encrypted libraries.
--seafile-library-key string Library password (for encrypted libraries only). Leave blank if you pass it through the command line.
--seafile-pass string Password
--seafile-library-key string Library password (for encrypted libraries only). Leave blank if you pass it through the command line. (obscured)
--seafile-pass string Password (obscured)
--seafile-url string URL of seafile host to connect to
--seafile-user string User name (usually email address)
--sftp-ask-password Allow asking for SFTP password when needed.
--sftp-disable-hashcheck Disable the execution of SSH commands to determine if remote file hashing is available.
--sftp-host string SSH host to connect to
--sftp-key-file string Path to PEM-encoded private key file, leave blank or set key-use-agent to use ssh-agent.
--sftp-key-file-pass string The passphrase to decrypt the PEM-encoded private key file.
--sftp-key-file-pass string The passphrase to decrypt the PEM-encoded private key file. (obscured)
--sftp-key-pem string Raw PEM-encoded private key, If specified, will override key_file parameter.
--sftp-key-use-agent When set forces the usage of the ssh-agent.
--sftp-md5sum-command string The command used to read md5 hashes. Leave blank for autodetect.
--sftp-pass string SSH password, leave blank to use ssh-agent.
--sftp-pass string SSH password, leave blank to use ssh-agent. (obscured)
--sftp-path-override string Override path used by SSH connection.
--sftp-port string SSH port, leave blank to use default (22)
--sftp-set-modtime Set the modified time on the remote if set. (default true)
@ -9996,7 +10017,7 @@ and may be set in the config file.
--union-upstreams string List of space separated upstreams.
--webdav-bearer-token string Bearer token instead of user/pass (eg a Macaroon)
--webdav-bearer-token-command string Command to run to get a bearer token
--webdav-pass string Password.
--webdav-pass string Password. (obscured)
--webdav-url string URL of http host to connect to
--webdav-user string User name
--webdav-vendor string Name of the Webdav site/service/software you are using
@ -13622,6 +13643,8 @@ The username of the Plex user
The password of the Plex user
**NB** Input to this must be obscured - see [rclone obscure](https://rclone.org/commands/rclone_obscure/).
- Config: plex_password
- Env Var: RCLONE_CACHE_PLEX_PASSWORD
- Type: string
@ -14880,6 +14903,8 @@ NB If filename_encryption is "off" then this option will do nothing.
Password or pass phrase for encryption.
**NB** Input to this must be obscured - see [rclone obscure](https://rclone.org/commands/rclone_obscure/).
- Config: password
- Env Var: RCLONE_CRYPT_PASSWORD
- Type: string
@ -14890,6 +14915,8 @@ Password or pass phrase for encryption.
Password or pass phrase for salt. Optional but recommended.
Should be different to the previous password.
**NB** Input to this must be obscured - see [rclone obscure](https://rclone.org/commands/rclone_obscure/).
- Config: password2
- Env Var: RCLONE_CRYPT_PASSWORD2
- Type: string
@ -15318,6 +15345,10 @@ FTP is the File Transfer Protocol. FTP support is provided using the
[github.com/jlaffaye/ftp](https://godoc.org/github.com/jlaffaye/ftp)
package.
Paths are specified as `remote:path`. If the path does not begin with
a `/` it is relative to the home directory of the user. An empty path
`remote:` refers to the user's home directory.
Here is an example of making an FTP configuration. First run
rclone config
@ -15480,6 +15511,8 @@ FTP port, leave blank to use default (21)
FTP password
**NB** Input to this must be obscured - see [rclone obscure](https://rclone.org/commands/rclone_obscure/).
- Config: pass
- Env Var: RCLONE_FTP_PASS
- Type: string
@ -16426,7 +16459,7 @@ For shortcuts pointing to folders:
- When deleting with `rclone rmdir` or `rclone purge` the shortcut is deleted not the linked folder.
- **NB** When deleting with `rclone remove` or `rclone mount` the contents of the linked folder will be deleted.
It isn't currently possible to create shortcuts with rclone.
The [rclone backend](https://rclone.org/commands/rclone_backend/) command can be used to create shortcuts.
Shortcuts can be completely ignored with the `--drive-skip-shortcuts` flag
or the corresponding `skip_shortcuts` configuration setting.
@ -16603,9 +16636,6 @@ Leave blank normally.
Fill in to access "Computers" folders (see docs), or for rclone to use
a non root folder as its starting point.
Note that if this is blank, the first time rclone runs it will fill it
in with the ID of the root folder.
- Config: root_folder_id
- Env Var: RCLONE_DRIVE_ROOT_FOLDER_ID
@ -17208,6 +17238,13 @@ the remote configuration, it's not such a big deal).
(Thanks to @balazer on github for these instructions.)
Sometimes, creation of an OAuth consent in Google API Console fails due to an error message
“The request failed because changes to one of the field of the resource is not supported”.
As a convenient workaround, the necessary Google Drive API key can be created on the
[Python Quickstart](https://developers.google.com/drive/api/v3/quickstart/python) page.
Just push the Enable the Drive API button to receive the Client ID and Secret.
Note that it will automatically create a new project in the API Console.
Google Photos
-------------------------------------------------
@ -18312,6 +18349,8 @@ Your Koofr user name
Your Koofr password for rclone (generate one at https://app.koofr.net/app/admin/preferences/password)
**NB** Input to this must be obscured - see [rclone obscure](https://rclone.org/commands/rclone_obscure/).
- Config: password
- Env Var: RCLONE_KOOFR_PASSWORD
- Type: string
@ -18544,6 +18583,8 @@ User name (usually email)
Password
**NB** Input to this must be obscured - see [rclone obscure](https://rclone.org/commands/rclone_obscure/).
- Config: pass
- Env Var: RCLONE_MAILRU_PASS
- Type: string
@ -18842,6 +18883,8 @@ User name
Password.
**NB** Input to this must be obscured - see [rclone obscure](https://rclone.org/commands/rclone_obscure/).
- Config: pass
- Env Var: RCLONE_MEGA_PASS
- Type: string
@ -19419,7 +19462,7 @@ requests.
If you are having problems with them (E.g., seeing a lot of throttling), you can get your own
Client ID and Key by following the steps below:
1. Open https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade, then click `New registration`.
1. Open https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade and then click `New registration`.
2. Enter a name for your app, choose account type `Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)`, select `Web` in `Redirect URI` Enter `http://localhost:53682/` and click Register. Copy and keep the `Application (client) ID` under the app name for later use.
3. Under `manage` select `Certificates & secrets`, click `New client secret`. Copy and keep that secret for later use.
4. Under `manage` select `API permissions`, click `Add a permission` and select `Microsoft Graph` then select `delegated permissions`.
@ -19818,6 +19861,8 @@ Username
Password.
**NB** Input to this must be obscured - see [rclone obscure](https://rclone.org/commands/rclone_obscure/).
- Config: password
- Env Var: RCLONE_OPENDRIVE_PASSWORD
- Type: string
@ -20837,6 +20882,17 @@ Fill in for rclone to use a non root folder as its starting point.
- Type: string
- Default: "d0"
#### --pcloud-hostname
Hostname to connect to.
This is normally set when rclone initially does the oauth connection.
- Config: hostname
- Env Var: RCLONE_PCLOUD_HOSTNAME
- Type: string
- Default: "api.pcloud.com"
premiumize.me
@ -21394,6 +21450,8 @@ User name (usually email address)
Password
**NB** Input to this must be obscured - see [rclone obscure](https://rclone.org/commands/rclone_obscure/).
- Config: pass
- Env Var: RCLONE_SEAFILE_PASS
- Type: string
@ -21421,6 +21479,8 @@ Name of the library. Leave blank to access all non-encrypted libraries.
Library password (for encrypted libraries only). Leave blank if you pass it through the command line.
**NB** Input to this must be obscured - see [rclone obscure](https://rclone.org/commands/rclone_obscure/).
- Config: library_key
- Env Var: RCLONE_SEAFILE_LIBRARY_KEY
- Type: string
@ -21650,6 +21710,8 @@ SSH port, leave blank to use default (22)
SSH password, leave blank to use ssh-agent.
**NB** Input to this must be obscured - see [rclone obscure](https://rclone.org/commands/rclone_obscure/).
- Config: pass
- Env Var: RCLONE_SFTP_PASS
- Type: string
@ -21680,6 +21742,8 @@ The passphrase to decrypt the PEM-encoded private key file.
Only PEM encrypted key files (old OpenSSH format) are supported. Encrypted keys
in the new OpenSSH format can't be used.
**NB** Input to this must be obscured - see [rclone obscure](https://rclone.org/commands/rclone_obscure/).
- Config: key_file_pass
- Env Var: RCLONE_SFTP_KEY_FILE_PASS
- Type: string
@ -22778,6 +22842,8 @@ User name
Password.
**NB** Input to this must be obscured - see [rclone obscure](https://rclone.org/commands/rclone_obscure/).
- Config: pass
- Env Var: RCLONE_WEBDAV_PASS
- Type: string
@ -23596,6 +23662,96 @@ Options:
# Changelog
## v1.52.3 - 2020-08-07
[See commits](https://github.com/rclone/rclone/compare/v1.52.2...v1.52.3)
* Bug Fixes
* docs
* Disable smart typography (eg en-dash) in MANUAL.* and man page (Nick Craig-Wood)
* Update install.md to reflect minimum Go version (Evan Harris)
* Update install from source instructions (Nick Craig-Wood)
* make_manual: Support SOURCE_DATE_EPOCH (Morten Linderud)
* log: Fix --use-json-log going to stderr not --log-file on Windows (Nick Craig-Wood)
* serve dlna: Fix file list on Samsung Series 6+ TVs (Matteo Pietro Dazzi)
* sync: Fix deadlock with --track-renames-strategy modtime (Nick Craig-Wood)
* Cache
* Fix moveto/copyto remote:file remote:file2 (Nick Craig-Wood)
* Drive
* Stop using root_folder_id as a cache (Nick Craig-Wood)
* Make dangling shortcuts appear in listings (Nick Craig-Wood)
* Drop "Disabling ListR" messages down to debug (Nick Craig-Wood)
* Workaround and policy for Google Drive API (Dmitry Ustalov)
* FTP
* Add note to docs about home vs root directory selection (Nick Craig-Wood)
* Onedrive
* Fix reverting to Copy when Move would have worked (Nick Craig-Wood)
* Avoid comma rendered in URL in onedrive.md (Kevin)
* Pcloud
* Fix oauth on European region "eapi.pcloud.com" (Nick Craig-Wood)
* S3
* Fix bucket Region auto detection when Region unset in config (Nick Craig-Wood)
## v1.52.2 - 2020-06-24
[See commits](https://github.com/rclone/rclone/compare/v1.52.1...v1.52.2)
* Bug Fixes
* build
* Fix docker release build action (Nick Craig-Wood)
* Fix custom timezone in Docker image (NoLooseEnds)
* check: Fix misleading message which printed errors instead of differences (Nick Craig-Wood)
* errors: Add WSAECONNREFUSED and more to the list of retriable Windows errors (Nick Craig-Wood)
* rcd: Fix incorrect prometheus metrics (Gary Kim)
* serve restic: Fix flags so they use environment variables (Nick Craig-Wood)
* serve webdav: Fix flags so they use environment variables (Nick Craig-Wood)
* sync: Fix --track-renames-strategy modtime (Nick Craig-Wood)
* Drive
* Fix not being able to delete a directory with a trashed shortcut (Nick Craig-Wood)
* Fix creating a directory inside a shortcut (Nick Craig-Wood)
* Fix --drive-impersonate with cached root_folder_id (Nick Craig-Wood)
* SFTP
* Fix SSH key PEM loading (Zac Rubin)
* Swift
* Speed up deletes by not retrying segment container deletes (Nick Craig-Wood)
* Tardigrade
* Upgrade to uplink v1.1.1 (Caleb Case)
* WebDAV
* Fix free/used display for rclone about/df for certain backends (Nick Craig-Wood)
## v1.52.1 - 2020-06-10
[See commits](https://github.com/rclone/rclone/compare/v1.52.0...v1.52.1)
* Bug Fixes
* lib/file: Fix SetSparse on Windows 7 which fixes downloads of files > 250MB (Nick Craig-Wood)
* build
* Update go.mod to go1.14 to enable -mod=vendor build (Nick Craig-Wood)
* Remove quicktest from Dockerfile (Nick Craig-Wood)
* Build Docker images with GitHub actions (Matteo Pietro Dazzi)
* Update Docker build workflows (Nick Craig-Wood)
* Set user_allow_other in /etc/fuse.conf in the Docker image (Nick Craig-Wood)
* Fix xgo build after go1.14 go.mod update (Nick Craig-Wood)
* docs
* Add link to source and modified time to footer of every page (Nick Craig-Wood)
* Remove manually set dates and use git dates instead (Nick Craig-Wood)
* Minor tense, punctuation, brevity and positivity changes for the home page (edwardxml)
* Remove leading slash in page reference in footer when present (Nick Craig-Wood)
* Note commands which need obscured input in the docs (Nick Craig-Wood)
* obscure: Write more help as we are referencing it elsewhere (Nick Craig-Wood)
* VFS
* Fix OS vs Unix path confusion - fixes ChangeNotify on Windows (Nick Craig-Wood)
* Drive
* Fix missing items when listing using --fast-list / ListR (Nick Craig-Wood)
* Putio
* Fix panic on Object.Open (Cenk Alti)
* S3
* Fix upload of single files into buckets without create permission (Nick Craig-Wood)
* Fix --header-upload (Nick Craig-Wood)
* Tardigrade
* Fix listing bug by upgrading to v1.0.7
* Set UserAgent to rclone (Caleb Case)
## v1.52.0 - 2020-05-27
Special thanks to Martin Michlmayr for proof reading and correcting

4550
MANUAL.txt generated

File diff suppressed because it is too large Load diff

View file

@ -105,16 +105,16 @@ tidy:
doc: rclone.1 MANUAL.html MANUAL.txt rcdocs commanddocs
rclone.1: MANUAL.md
pandoc -s --from markdown --to man MANUAL.md -o rclone.1
pandoc -s --from markdown-smart --to man MANUAL.md -o rclone.1
MANUAL.md: bin/make_manual.py docs/content/*.md commanddocs backenddocs
./bin/make_manual.py
MANUAL.html: MANUAL.md
pandoc -s --from markdown --to html MANUAL.md -o MANUAL.html
pandoc -s --from markdown-smart --to html MANUAL.md -o MANUAL.html
MANUAL.txt: MANUAL.md
pandoc -s --from markdown --to plain MANUAL.md -o MANUAL.txt
pandoc -s --from markdown-smart --to plain MANUAL.md -o MANUAL.txt
commanddocs: rclone
XDG_CACHE_HOME="" XDG_CONFIG_HOME="" HOME="\$$HOME" USER="\$$USER" rclone gendocs docs/content/

View file

@ -1 +1 @@
v1.52.0
v1.52.3

View file

@ -33,6 +33,7 @@ import (
"github.com/rclone/rclone/fs/object"
"github.com/rclone/rclone/fs/rc"
"github.com/rclone/rclone/fstest"
"github.com/rclone/rclone/fstest/testy"
"github.com/rclone/rclone/lib/random"
"github.com/rclone/rclone/vfs"
"github.com/rclone/rclone/vfs/vfsflags"
@ -299,6 +300,7 @@ func TestInternalRemoteWrittenFileFoundInMount(t *testing.T) {
}
func TestInternalCachedWrittenContentMatches(t *testing.T) {
testy.SkipUnreliable(t)
id := fmt.Sprintf("ticwcm%v", time.Now().Unix())
rootFs, boltDb := runInstance.newCacheFs(t, remoteName, id, false, true, nil, nil)
defer runInstance.cleanupFs(t, rootFs, boltDb)
@ -342,6 +344,7 @@ func TestInternalDoubleWrittenContentMatches(t *testing.T) {
}
func TestInternalCachedUpdatedContentMatches(t *testing.T) {
testy.SkipUnreliable(t)
id := fmt.Sprintf("ticucm%v", time.Now().Unix())
rootFs, boltDb := runInstance.newCacheFs(t, remoteName, id, false, true, nil, nil)
defer runInstance.cleanupFs(t, rootFs, boltDb)

View file

@ -24,6 +24,7 @@ import (
"strconv"
"strings"
"sync"
"sync/atomic"
"text/template"
"time"
@ -56,6 +57,7 @@ const (
rcloneEncryptedClientSecret = "eX8GpZTVx3vxMWVkuuBdDWmAUE6rGhTwVrvG9GhllYccSdj2-mvHVg"
driveFolderType = "application/vnd.google-apps.folder"
shortcutMimeType = "application/vnd.google-apps.shortcut"
shortcutMimeTypeDangling = "application/vnd.google-apps.shortcut.dangling" // synthetic mime type for internal use
timeFormatIn = time.RFC3339
timeFormatOut = "2006-01-02T15:04:05.000000000Z07:00"
defaultMinSleep = fs.Duration(100 * time.Millisecond)
@ -68,6 +70,8 @@ const (
minChunkSize = 256 * fs.KibiByte
defaultChunkSize = 8 * fs.MebiByte
partialFields = "id,name,size,md5Checksum,trashed,modifiedTime,createdTime,mimeType,parents,webViewLink,shortcutDetails"
listRGrouping = 50 // number of IDs to search at once when using ListR
listRInputBuffer = 1000 // size of input buffer when using ListR
)
// Globals
@ -220,9 +224,6 @@ Leave blank normally.
Fill in to access "Computers" folders (see docs), or for rclone to use
a non root folder as its starting point.
Note that if this is blank, the first time rclone runs it will fill it
in with the ID of the root folder.
`,
}, {
Name: "service_account_file",
@ -348,7 +349,7 @@ date is used.`,
}, {
Name: "impersonate",
Default: "",
Help: "Impersonate this user when using a service account.",
Help: `Impersonate this user when using a service account.`,
Advanced: true,
}, {
Name: "alternate_export",
@ -558,6 +559,9 @@ type Fs struct {
isTeamDrive bool // true if this is a team drive
fileFields googleapi.Field // fields to fetch file info with
m configmap.Mapper
grouping int32 // number of IDs to search at once in ListR - read with atomic
listRmu *sync.Mutex // protects listRempties
listRempties map[string]struct{} // IDs of supposedly empty directories which triggered grouping disable
}
type baseObject struct {
@ -1079,11 +1083,14 @@ func NewFs(name, path string, m configmap.Mapper) (fs.Fs, error) {
}
f := &Fs{
name: name,
root: root,
opt: *opt,
pacer: newPacer(opt),
m: m,
name: name,
root: root,
opt: *opt,
pacer: newPacer(opt),
m: m,
grouping: listRGrouping,
listRmu: new(sync.Mutex),
listRempties: make(map[string]struct{}),
}
f.isTeamDrive = opt.TeamDriveID != ""
f.fileFields = f.getFileFields()
@ -1109,14 +1116,15 @@ func NewFs(name, path string, m configmap.Mapper) (fs.Fs, error) {
}
}
// set root folder for a team drive or query the user root folder
// Set the root folder ID
if opt.RootFolderID != "" {
// override root folder if set or cached in the config
// use root_folder ID if set
f.rootFolderID = opt.RootFolderID
} else if f.isTeamDrive {
// otherwise use team_drive if set
f.rootFolderID = f.opt.TeamDriveID
} else {
// Look up the root ID and cache it in the config
// otherwise look up the actual root ID
rootID, err := f.getRootID()
if err != nil {
if gerr, ok := errors.Cause(err).(*googleapi.Error); ok && gerr.Code == 404 {
@ -1128,7 +1136,7 @@ func NewFs(name, path string, m configmap.Mapper) (fs.Fs, error) {
}
}
f.rootFolderID = rootID
m.Set("root_folder_id", rootID)
fs.Debugf(f, "root_folder_id = %q - save this in the config to speed up startup", rootID)
}
f.dirCache = dircache.New(root, f.rootFolderID, f)
@ -1330,6 +1338,10 @@ func (f *Fs) newObjectWithExportInfo(
// and not from a listing. This is unlikely.
fs.Debugf(remote, "Ignoring shortcut as skip shortcuts is set")
return nil, fs.ErrorObjectNotFound
case info.MimeType == shortcutMimeTypeDangling:
// Pretend a dangling shortcut is a regular object
// It will error if used, but appear in listings so it can be deleted
return f.newRegularObject(remote, info), nil
case info.Md5Checksum != "" || info.Size > 0:
// If item has MD5 sum or a length it is a file stored on drive
return f.newRegularObject(remote, info), nil
@ -1402,6 +1414,7 @@ func (f *Fs) CreateDir(ctx context.Context, pathID, leaf string) (newID string,
leaf = f.opt.Enc.FromStandardName(leaf)
// fmt.Println("Making", path)
// Define the metadata for the directory we are going to create.
pathID = actualID(pathID)
createInfo := &drive.File{
Name: leaf,
Description: leaf,
@ -1634,15 +1647,17 @@ func (s listRSlices) Less(i, j int) bool {
// In each cycle it will read up to grouping entries from the in channel without blocking.
// If an error occurs it will be send to the out channel and then return. Once the in channel is closed,
// nil is send to the out channel and the function returns.
func (f *Fs) listRRunner(ctx context.Context, wg *sync.WaitGroup, in <-chan listREntry, out chan<- error, cb func(fs.DirEntry) error, grouping int) {
func (f *Fs) listRRunner(ctx context.Context, wg *sync.WaitGroup, in chan listREntry, out chan<- error, cb func(fs.DirEntry) error) {
var dirs []string
var paths []string
var grouping int32
for dir := range in {
dirs = append(dirs[:0], dir.id)
paths = append(paths[:0], dir.path)
grouping = atomic.LoadInt32(&f.grouping)
waitloop:
for i := 1; i < grouping; i++ {
for i := int32(1); i < grouping; i++ {
select {
case d, ok := <-in:
if !ok {
@ -1655,6 +1670,7 @@ func (f *Fs) listRRunner(ctx context.Context, wg *sync.WaitGroup, in <-chan list
}
listRSlices{dirs, paths}.Sort()
var iErr error
foundItems := false
_, err := f.list(ctx, dirs, "", false, false, false, func(item *drive.File) bool {
// shared with me items have no parents when at the root
if f.opt.SharedWithMe && len(item.Parents) == 0 && len(paths) == 1 && paths[0] == "" {
@ -1662,6 +1678,7 @@ func (f *Fs) listRRunner(ctx context.Context, wg *sync.WaitGroup, in <-chan list
}
for _, parent := range item.Parents {
var i int
foundItems = true
earlyExit := false
// If only one item in paths then no need to search for the ID
// assuming google drive is doing its job properly.
@ -1702,6 +1719,53 @@ func (f *Fs) listRRunner(ctx context.Context, wg *sync.WaitGroup, in <-chan list
}
return false
})
// Found no items in more than one directory. Retry these as
// individual directories This is to work around a bug in google
// drive where (A in parents) or (B in parents) returns nothing
// sometimes. See #3114, #4289 and
// https://issuetracker.google.com/issues/149522397
if len(dirs) > 1 && !foundItems {
if atomic.SwapInt32(&f.grouping, 1) != 1 {
fs.Debugf(f, "Disabling ListR to work around bug in drive as multi listing (%d) returned no entries", len(dirs))
}
var recycled = make([]listREntry, len(dirs))
f.listRmu.Lock()
for i := range dirs {
recycled[i] = listREntry{id: dirs[i], path: paths[i]}
// Make a note of these dirs - if they all turn
// out to be empty then we can re-enable grouping
f.listRempties[dirs[i]] = struct{}{}
}
f.listRmu.Unlock()
// recycle these in the background so we don't deadlock
// the listR runners if they all get here
wg.Add(len(recycled))
go func() {
for _, entry := range recycled {
in <- entry
}
fs.Debugf(f, "Recycled %d entries", len(recycled))
}()
}
// If using a grouping of 1 and dir was empty then check to see if it
// is part of the group that caused grouping to be disabled.
if grouping == 1 && len(dirs) == 1 && !foundItems {
f.listRmu.Lock()
if _, found := f.listRempties[dirs[0]]; found {
// Remove the ID
delete(f.listRempties, dirs[0])
// If no empties left => all the directories that
// triggered the grouping being set to 1 were actually
// empty so must have made a mistake
if len(f.listRempties) == 0 {
if atomic.SwapInt32(&f.grouping, listRGrouping) != listRGrouping {
fs.Debugf(f, "Re-enabling ListR as previous detection was in error")
}
}
}
f.listRmu.Unlock()
}
for range dirs {
wg.Done()
}
@ -1736,11 +1800,6 @@ func (f *Fs) listRRunner(ctx context.Context, wg *sync.WaitGroup, in <-chan list
// Don't implement this unless you have a more efficient way
// of listing recursively that doing a directory traversal.
func (f *Fs) ListR(ctx context.Context, dir string, callback fs.ListRCallback) (err error) {
const (
grouping = 50
inputBuffer = 1000
)
err = f.dirCache.FindRoot(ctx, false)
if err != nil {
return err
@ -1753,7 +1812,7 @@ func (f *Fs) ListR(ctx context.Context, dir string, callback fs.ListRCallback) (
mu := sync.Mutex{} // protects in and overflow
wg := sync.WaitGroup{}
in := make(chan listREntry, inputBuffer)
in := make(chan listREntry, listRInputBuffer)
out := make(chan error, fs.Config.Checkers)
list := walk.NewListRHelper(callback)
overflow := []listREntry{}
@ -1766,6 +1825,9 @@ func (f *Fs) ListR(ctx context.Context, dir string, callback fs.ListRCallback) (
job := listREntry{actualID(d.ID()), d.Remote()}
select {
case in <- job:
// Adding the wg after we've entered the item is
// safe here because we know when the callback
// is called we are holding a waitgroup.
wg.Add(1)
default:
overflow = append(overflow, job)
@ -1779,7 +1841,7 @@ func (f *Fs) ListR(ctx context.Context, dir string, callback fs.ListRCallback) (
in <- listREntry{directoryID, dir}
for i := 0; i < fs.Config.Checkers; i++ {
go f.listRRunner(ctx, &wg, in, out, cb, grouping)
go f.listRRunner(ctx, &wg, in, out, cb)
}
go func() {
// wait until the all directories are processed
@ -1789,8 +1851,8 @@ func (f *Fs) ListR(ctx context.Context, dir string, callback fs.ListRCallback) (
mu.Lock()
l := len(overflow)
// only fill half of the channel to prevent entries being put into overflow again
if l > inputBuffer/2 {
l = inputBuffer / 2
if l > listRInputBuffer/2 {
l = listRInputBuffer / 2
}
wg.Add(l)
for _, d := range overflow[:l] {
@ -1912,11 +1974,18 @@ func (f *Fs) resolveShortcut(item *drive.File) (newItem *drive.File, err error)
}
newItem, err = f.getFile(item.ShortcutDetails.TargetId, f.fileFields)
if err != nil {
if gerr, ok := errors.Cause(err).(*googleapi.Error); ok && gerr.Code == 404 {
// 404 means dangling shortcut, so just return the shortcut with the mime type mangled
fs.Logf(nil, "Dangling shortcut %q detected", item.Name)
item.MimeType = shortcutMimeTypeDangling
return item, nil
}
return nil, errors.Wrap(err, "failed to resolve shortcut")
}
// make sure we use the Name and Parents from the original item
// make sure we use the Name, Parents and Trashed from the original item
newItem.Name = item.Name
newItem.Parents = item.Parents
newItem.Trashed = item.Trashed
// the new ID is a composite ID
newItem.Id = joinID(newItem.Id, item.Id)
return newItem, nil
@ -3219,6 +3288,9 @@ func (o *baseObject) open(ctx context.Context, url string, options ...fs.OpenOpt
// Open an object for read
func (o *Object) Open(ctx context.Context, options ...fs.OpenOption) (in io.ReadCloser, err error) {
if o.mimeType == shortcutMimeTypeDangling {
return nil, errors.New("can't read dangling shortcut")
}
if o.v2Download {
var v2File *drive_v2.File
err = o.fs.pacer.Call(func() (bool, error) {

View file

@ -1121,9 +1121,10 @@ func (f *Fs) Move(ctx context.Context, src fs.Object, remote string) (fs.Object,
id, dstDriveID, _ := parseNormalizedID(directoryID)
_, srcObjDriveID, _ := parseNormalizedID(srcObj.id)
if dstDriveID != srcObjDriveID {
if f.canonicalDriveID(dstDriveID) != srcObj.fs.canonicalDriveID(srcObjDriveID) {
// https://docs.microsoft.com/en-us/graph/api/driveitem-move?view=graph-rest-1.0
// "Items cannot be moved between Drives using this request."
fs.Debugf(f, "Can't move files between drives (%q != %q)", dstDriveID, srcObjDriveID)
return nil, fs.ErrorCantMove
}
@ -1219,9 +1220,10 @@ func (f *Fs) DirMove(ctx context.Context, src fs.Fs, srcRemote, dstRemote string
}
_, srcDriveID, _ := parseNormalizedID(srcID)
if dstDriveID != srcDriveID {
if f.canonicalDriveID(dstDriveID) != srcFs.canonicalDriveID(srcDriveID) {
// https://docs.microsoft.com/en-us/graph/api/driveitem-move?view=graph-rest-1.0
// "Items cannot be moved between Drives using this request."
fs.Debugf(f, "Can't move directories between drives (%q != %q)", dstDriveID, srcDriveID)
return fs.ErrorCantDirMove
}
@ -1869,6 +1871,17 @@ func parseNormalizedID(ID string) (string, string, string) {
return ID, "", ""
}
// Returns the canonical form of the driveID
func (f *Fs) canonicalDriveID(driveID string) (canonicalDriveID string) {
if driveID == "" {
canonicalDriveID = f.opt.DriveID
} else {
canonicalDriveID = driveID
}
canonicalDriveID = strings.ToLower(canonicalDriveID)
return canonicalDriveID
}
// getRelativePathInsideBase checks if `target` is inside `base`. If so, it
// returns a relative path for `target` based on `base` and a boolean `true`.
// Otherwise returns "", false.

View file

@ -42,7 +42,7 @@ const (
minSleep = 10 * time.Millisecond
maxSleep = 2 * time.Second
decayConstant = 2 // bigger for slower decay, exponential
rootURL = "https://api.pcloud.com"
defaultHostname = "api.pcloud.com"
)
// Globals
@ -51,8 +51,8 @@ var (
oauthConfig = &oauth2.Config{
Scopes: nil,
Endpoint: oauth2.Endpoint{
AuthURL: "https://my.pcloud.com/oauth2/authorize",
TokenURL: "https://api.pcloud.com/oauth2_token",
AuthURL: "https://my.pcloud.com/oauth2/authorize",
// TokenURL: "https://api.pcloud.com/oauth2_token", set by updateTokenURL
},
ClientID: rcloneClientID,
ClientSecret: obscure.MustReveal(rcloneEncryptedClientSecret),
@ -60,17 +60,45 @@ var (
}
)
// Update the TokenURL with the actual hostname
func updateTokenURL(oauthConfig *oauth2.Config, hostname string) {
oauthConfig.Endpoint.TokenURL = "https://" + hostname + "/oauth2_token"
}
// Register with Fs
func init() {
updateTokenURL(oauthConfig, defaultHostname)
fs.Register(&fs.RegInfo{
Name: "pcloud",
Description: "Pcloud",
NewFs: NewFs,
Config: func(name string, m configmap.Mapper) {
optc := new(Options)
err := configstruct.Set(m, optc)
if err != nil {
fs.Errorf(nil, "Failed to read config: %v", err)
}
updateTokenURL(oauthConfig, optc.Hostname)
checkAuth := func(oauthConfig *oauth2.Config, auth *oauthutil.AuthResult) error {
if auth == nil || auth.Form == nil {
return errors.New("form not found in response")
}
hostname := auth.Form.Get("hostname")
if hostname == "" {
hostname = defaultHostname
}
// Save the hostname in the config
m.Set("hostname", hostname)
// Update the token URL
updateTokenURL(oauthConfig, hostname)
fs.Debugf(nil, "pcloud: got hostname %q", hostname)
return nil
}
opt := oauthutil.Options{
CheckAuth: checkAuth,
StateBlankOK: true, // pCloud seems to drop the state parameter now - see #4210
}
err := oauthutil.Config("pcloud", name, m, oauthConfig, &opt)
err = oauthutil.Config("pcloud", name, m, oauthConfig, &opt)
if err != nil {
log.Fatalf("Failed to configure token: %v", err)
}
@ -96,6 +124,13 @@ func init() {
Help: "Fill in for rclone to use a non root folder as its starting point.",
Default: "d0",
Advanced: true,
}, {
Name: "hostname",
Help: `Hostname to connect to.
This is normally set when rclone initially does the oauth connection.`,
Default: defaultHostname,
Advanced: true,
}},
})
}
@ -104,6 +139,7 @@ func init() {
type Options struct {
Enc encoder.MultiEncoder `config:"encoding"`
RootFolderID string `config:"root_folder_id"`
Hostname string `config:"hostname"`
}
// Fs represents a remote pcloud
@ -253,12 +289,13 @@ func NewFs(name, root string, m configmap.Mapper) (fs.Fs, error) {
if err != nil {
return nil, errors.Wrap(err, "failed to configure Pcloud")
}
updateTokenURL(oauthConfig, opt.Hostname)
f := &Fs{
name: name,
root: root,
opt: *opt,
srv: rest.NewClient(oAuthClient).SetRoot(rootURL),
srv: rest.NewClient(oAuthClient).SetRoot("https://" + opt.Hostname),
pacer: fs.NewPacer(pacer.NewDefault(pacer.MinSleep(minSleep), pacer.MaxSleep(maxSleep), pacer.DecayConstant(decayConstant))),
}
f.features = (&fs.Features{

View file

@ -248,7 +248,10 @@ func (o *Object) Open(ctx context.Context, options ...fs.OpenOption) (in io.Read
_ = resp.Body.Close()
return nil, fserrors.NoRetryError(err)
}
return resp.Body, err
if err != nil {
return nil, err
}
return resp.Body, nil
}
// Update the already existing object

View file

@ -59,6 +59,7 @@ import (
"github.com/rclone/rclone/lib/pool"
"github.com/rclone/rclone/lib/readers"
"github.com/rclone/rclone/lib/rest"
"github.com/rclone/rclone/lib/structs"
"golang.org/x/sync/errgroup"
)
@ -1126,9 +1127,6 @@ func s3Connection(opt *Options) (*s3.S3, *session.Session, error) {
return nil, nil, errors.New("secret_access_key not found")
}
if opt.Region == "" && opt.Endpoint == "" {
opt.Endpoint = "https://s3.amazonaws.com/"
}
if opt.Region == "" {
opt.Region = "us-east-1"
}
@ -2033,11 +2031,17 @@ func (o *Object) readMetaData(ctx context.Context) (err error) {
if err != nil {
if awsErr, ok := err.(awserr.RequestFailure); ok {
if awsErr.StatusCode() == http.StatusNotFound {
// NotFound indicates bucket was OK
// NoSuchBucket would be returned if bucket was bad
if awsErr.Code() == "NotFound" {
o.fs.cache.MarkOK(bucket)
}
return fs.ErrorObjectNotFound
}
}
return err
}
o.fs.cache.MarkOK(bucket)
var size int64
// Ignore missing Content-Length assuming it is 0
// Some versions of ceph do this due their apache proxies
@ -2198,19 +2202,12 @@ func (o *Object) uploadMultipart(ctx context.Context, req *s3.PutObjectInput, si
memPool := f.getMemoryPool(int64(partSize))
var mReq s3.CreateMultipartUploadInput
structs.SetFrom(&mReq, req)
var cout *s3.CreateMultipartUploadOutput
err = f.pacer.Call(func() (bool, error) {
var err error
cout, err = f.c.CreateMultipartUploadWithContext(ctx, &s3.CreateMultipartUploadInput{
Bucket: req.Bucket,
ACL: req.ACL,
Key: req.Key,
ContentType: req.ContentType,
Metadata: req.Metadata,
ServerSideEncryption: req.ServerSideEncryption,
SSEKMSKeyId: req.SSEKMSKeyId,
StorageClass: req.StorageClass,
})
cout, err = f.c.CreateMultipartUploadWithContext(ctx, &mReq)
return f.shouldRetry(err)
})
if err != nil {
@ -2423,6 +2420,35 @@ func (o *Object) Update(ctx context.Context, in io.Reader, src fs.ObjectInfo, op
if o.fs.opt.StorageClass != "" {
req.StorageClass = &o.fs.opt.StorageClass
}
// Apply upload options
for _, option := range options {
key, value := option.Header()
lowerKey := strings.ToLower(key)
switch lowerKey {
case "":
// ignore
case "cache-control":
req.CacheControl = aws.String(value)
case "content-disposition":
req.ContentDisposition = aws.String(value)
case "content-encoding":
req.ContentEncoding = aws.String(value)
case "content-language":
req.ContentLanguage = aws.String(value)
case "content-type":
req.ContentType = aws.String(value)
case "x-amz-tagging":
req.Tagging = aws.String(value)
default:
const amzMetaPrefix = "x-amz-meta-"
if strings.HasPrefix(lowerKey, amzMetaPrefix) {
metaKey := lowerKey[len(amzMetaPrefix):]
req.Metadata[metaKey] = aws.String(value)
} else {
fs.Errorf(o, "Don't know how to set key %q on upload", key)
}
}
}
if multipart {
err = o.uploadMultipart(ctx, &req, size, in)
@ -2463,18 +2489,6 @@ func (o *Object) Update(ctx context.Context, in io.Reader, src fs.ObjectInfo, op
httpReq.Header = headers
httpReq.ContentLength = size
for _, option := range options {
switch option.(type) {
case *fs.HTTPOption:
key, value := option.Header()
httpReq.Header.Add(key, value)
default:
if option.Mandatory() {
fs.Logf(o, "Unsupported mandatory option: %v", option)
}
}
}
err = o.fs.pacer.CallNoRetry(func() (bool, error) {
resp, err := o.fs.srv.Do(httpReq)
if err != nil {

View file

@ -395,8 +395,8 @@ func NewFs(name, root string, m configmap.Mapper) (fs.Fs, error) {
keyFile := env.ShellExpand(opt.KeyFile)
//keyPem := env.ShellExpand(opt.KeyPem)
// Add ssh agent-auth if no password or file specified
if (opt.Pass == "" && keyFile == "" && !opt.AskPassword) || opt.KeyUseAgent {
// Add ssh agent-auth if no password or file or key PEM specified
if (opt.Pass == "" && keyFile == "" && !opt.AskPassword && opt.KeyPem == "") || opt.KeyUseAgent {
sshAgentClient, _, err := sshagent.New()
if err != nil {
return nil, errors.Wrap(err, "couldn't connect to ssh-agent")

View file

@ -1124,6 +1124,9 @@ func (o *Object) removeSegments(except string) error {
// remove the segments container if empty, ignore errors
err = o.fs.pacer.Call(func() (bool, error) {
err = o.fs.c.ContainerDelete(segmentsContainer)
if err == swift.ContainerNotFound || err == swift.ContainerNotEmpty {
return false, err
}
return shouldRetry(err)
})
if err == nil {

View file

@ -269,7 +269,9 @@ func (f *Fs) connect(ctx context.Context) (project *uplink.Project, err error) {
fs.Debugf(f, "connecting...")
defer fs.Debugf(f, "connected: %+v", err)
cfg := uplink.Config{}
cfg := uplink.Config{
UserAgent: "rclone",
}
project, err = cfg.OpenProject(ctx, f.access)
if err != nil {

View file

@ -226,6 +226,6 @@ func (t *Time) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
// </d:response>
// </d:multistatus>
type Quota struct {
Available int64 `xml:"DAV: response>propstat>prop>quota-available-bytes"`
Used int64 `xml:"DAV: response>propstat>prop>quota-used-bytes"`
Available string `xml:"DAV: response>propstat>prop>quota-available-bytes"`
Used string `xml:"DAV: response>propstat>prop>quota-used-bytes"`
}

View file

@ -17,6 +17,7 @@ import (
"net/url"
"os/exec"
"path"
"strconv"
"strings"
"time"
@ -975,10 +976,7 @@ func (f *Fs) About(ctx context.Context) (*fs.Usage, error) {
</D:prop>
</D:propfind>
`))
var q = api.Quota{
Available: -1,
Used: -1,
}
var q api.Quota
var resp *http.Response
var err error
err = f.pacer.Call(func() (bool, error) {
@ -989,14 +987,14 @@ func (f *Fs) About(ctx context.Context) (*fs.Usage, error) {
return nil, errors.Wrap(err, "about call failed")
}
usage := &fs.Usage{}
if q.Used >= 0 {
usage.Used = fs.NewUsageValue(q.Used)
if i, err := strconv.ParseInt(q.Used, 10, 64); err == nil && i >= 0 {
usage.Used = fs.NewUsageValue(i)
}
if q.Available >= 0 {
usage.Free = fs.NewUsageValue(q.Available)
if i, err := strconv.ParseInt(q.Available, 10, 64); err == nil && i >= 0 {
usage.Free = fs.NewUsageValue(i)
}
if q.Available >= 0 && q.Used >= 0 {
usage.Total = fs.NewUsageValue(q.Available + q.Used)
if usage.Used != nil && usage.Free != nil {
usage.Total = fs.NewUsageValue(*usage.Used + *usage.Free)
}
return usage, nil
}

View file

@ -6,6 +6,7 @@ conversion into man pages etc.
import os
import re
import time
from datetime import datetime
docpath = "docs/content"
@ -156,17 +157,19 @@ def read_commands(docpath):
if command != "rclone.md":
docs.append(read_command(command))
return "\n".join(docs)
def main():
check_docs(docpath)
command_docs = read_commands(docpath).replace("\\", "\\\\") # escape \ so we can use command_docs in re.sub
build_date = datetime.utcfromtimestamp(
int(os.environ.get('SOURCE_DATE_EPOCH', time.time())))
with open(outfile, "w") as out:
out.write("""\
%% rclone(1) User Manual
%% Nick Craig-Wood
%% %s
""" % datetime.now().strftime("%b %d, %Y"))
""" % build_date.strftime("%b %d, %Y"))
for doc in docs:
contents = read_doc(doc)
# Substitute the commands into doc.md

View file

@ -486,6 +486,9 @@ func AddBackendFlags() {
help = help[:nl]
}
help = strings.TrimSpace(help)
if opt.IsPassword {
help += " (obscured)"
}
flag := pflag.CommandLine.VarPF(opt, name, opt.ShortOpt, help)
if _, isBool := opt.Default.(bool); isBool {
flag.NoOptDefVal = "true"

View file

@ -11,9 +11,11 @@ package cmount
import (
"testing"
"github.com/rclone/rclone/fstest/testy"
"github.com/rclone/rclone/vfs/vfstest"
)
func TestMount(t *testing.T) {
testy.SkipUnreliable(t)
vfstest.RunTests(t, false, mount)
}

View file

@ -33,7 +33,6 @@ type frontmatter struct {
}
var frontmatterTemplate = template.Must(template.New("frontmatter").Parse(`---
date: {{ .Date }}
title: "{{ .Title }}"
description: "{{ .Description }}"
slug: {{ .Slug }}
@ -70,8 +69,7 @@ rclone.org website.`,
if err != nil {
return err
}
flagsHelp := strings.Replace(buf.String(), "YYYY-MM-DD", now, -1)
err = ioutil.WriteFile(filepath.Join(root, "flags.md"), []byte(flagsHelp), 0777)
err = ioutil.WriteFile(filepath.Join(root, "flags.md"), buf.Bytes(), 0777)
if err != nil {
return err
}

View file

@ -245,7 +245,6 @@ Use "rclone help backends" for a list of supported services.
var docFlagsTemplate = `---
title: "Global Flags"
description: "Rclone Global Flags"
date: "YYYY-MM-DD"
---
# Global Flags
@ -325,6 +324,9 @@ func showBackend(name string) {
}
fmt.Printf("#### --%s%s\n\n", opt.FlagName(backend.Prefix), shortOpt)
fmt.Printf("%s\n\n", opt.Help)
if opt.IsPassword {
fmt.Printf("**NB** Input to this must be obscured - see [rclone obscure](/commands/rclone_obscure/).\n\n")
}
fmt.Printf("- Config: %s\n", opt.Name)
fmt.Printf("- Env Var: %s\n", opt.EnvVarName(backend.Prefix))
fmt.Printf("- Type: %s\n", opt.Type())

View file

@ -5,9 +5,11 @@ package mount2
import (
"testing"
"github.com/rclone/rclone/fstest/testy"
"github.com/rclone/rclone/vfs/vfstest"
)
func TestMount(t *testing.T) {
testy.SkipUnreliable(t)
vfstest.RunTests(t, false, mount)
}

View file

@ -78,7 +78,9 @@ func TestRc(t *testing.T) {
// mount
_, err = mount.Fn(ctx, in)
require.NoError(t, err)
if err != nil {
t.Skipf("Mount failed - skipping test: %v", err)
}
// check file.txt is there now
fi, err := os.Stat(filePath)

View file

@ -14,7 +14,21 @@ func init() {
var commandDefinition = &cobra.Command{
Use: "obscure password",
Short: `Obscure password for use in the rclone.conf`,
Short: `Obscure password for use in the rclone config file`,
Long: `In the rclone config file, human readable passwords are
obscured. Obscuring them is done by encrypting them and writing them
out in base64. This is **not** a secure way of encrypting these
passwords as rclone can decrypt them - it is to prevent "eyedropping"
- namely someone seeing a password in the rclone config file by
accident.
Many equally important things (like access tokens) are not obscured in
the config file. However it is very hard to shoulder surf a 64
character hex token.
If you want to encrypt the config file then please use config file
encryption - see [rclone config](/commands/rclone_config/) for more
info.`,
Run: func(command *cobra.Command, args []string) {
cmd.CheckArgs(1, 1, command, args)
cmd.Run(false, false, command, func() error {

View file

@ -77,10 +77,12 @@ func (cds *contentDirectoryService) cdsObjectToUpnpavObject(cdsObject object, fi
}
if fileInfo.IsDir() {
defaultChildCount := 1
obj.Class = "object.container.storageFolder"
obj.Title = fileInfo.Name()
return upnpav.Container{
Object: obj,
Object: obj,
ChildCount: &defaultChildCount,
}, nil
}

View file

@ -17,6 +17,7 @@ import (
"github.com/rclone/rclone/cmd/serve/httplib/serve"
"github.com/rclone/rclone/fs"
"github.com/rclone/rclone/fs/accounting"
"github.com/rclone/rclone/fs/config/flags"
"github.com/rclone/rclone/fs/fserrors"
"github.com/rclone/rclone/fs/operations"
"github.com/rclone/rclone/fs/walk"
@ -33,9 +34,10 @@ var (
func init() {
httpflags.AddFlags(Command.Flags())
Command.Flags().BoolVar(&stdio, "stdio", false, "run an HTTP2 server on stdin/stdout")
Command.Flags().BoolVar(&appendOnly, "append-only", false, "disallow deletion of repository data")
Command.Flags().BoolVar(&privateRepos, "private-repos", false, "users can only access their private repo")
flagSet := Command.Flags()
flags.BoolVarP(flagSet, &stdio, "stdio", "", false, "run an HTTP2 server on stdin/stdout")
flags.BoolVarP(flagSet, &appendOnly, "append-only", "", false, "disallow deletion of repository data")
flags.BoolVarP(flagSet, &privateRepos, "private-repos", "", false, "users can only access their private repo")
}
// Command definition for cobra

View file

@ -15,6 +15,7 @@ import (
"github.com/rclone/rclone/cmd/serve/proxy"
"github.com/rclone/rclone/cmd/serve/proxy/proxyflags"
"github.com/rclone/rclone/fs"
"github.com/rclone/rclone/fs/config/flags"
"github.com/rclone/rclone/fs/hash"
"github.com/rclone/rclone/lib/errors"
"github.com/rclone/rclone/vfs"
@ -30,11 +31,12 @@ var (
)
func init() {
httpflags.AddFlags(Command.Flags())
vfsflags.AddFlags(Command.Flags())
proxyflags.AddFlags(Command.Flags())
Command.Flags().StringVar(&hashName, "etag-hash", "", "Which hash to use for the ETag, or auto or blank for off")
Command.Flags().BoolVar(&disableGETDir, "disable-dir-list", false, "Disable HTML directory list on GET request for a directory")
flagSet := Command.Flags()
httpflags.AddFlags(flagSet)
vfsflags.AddFlags(flagSet)
proxyflags.AddFlags(flagSet)
flags.StringVarP(flagSet, &hashName, "etag-hash", "", "", "Which hash to use for the ETag, or auto or blank for off")
flags.BoolVarP(flagSet, &disableGETDir, "disable-dir-list", "", false, "Disable HTML directory list on GET request for a directory")
}
// Command definition for cobra

View file

@ -16,6 +16,7 @@
"~$",
"^\\."
],
"enableGitInfo": true,
"markup": {
"goldmark": {
"extensions": {

View file

@ -2,7 +2,6 @@
title: "Rclone"
description: "Rclone syncs your files to cloud storage: Google Drive, S3, Swift, Dropbox, Google Cloud Storage, Azure, Box and many more."
type: page
date: "2020-05-16"
---
# Rclone syncs your files to cloud storage
@ -10,9 +9,9 @@ date: "2020-05-16"
{{< img width="50%" src="/img/logo_on_light__horizontal_color.svg" alt="rclone logo" style="float:right; padding: 5px;" >}}
- [About rclone](#about)
- [What can rclone do for you](#what)
- [What features does rclone have](#features)
- [What providers does rclone support](#providers)
- [What can rclone do for you?](#what)
- [What features does rclone have?](#features)
- [What providers does rclone support?](#providers)
- [Download](/downloads/)
- [Install](/install/)
{{< rem MAINPAGELINK >}}
@ -27,20 +26,20 @@ services, as well as standard transfer protocols.
Rclone has powerful cloud equivalents to the unix commands rsync, cp,
mv, mount, ls, ncdu, tree, rm, and cat. Rclone's familiar syntax
includes shell pipeline support, and `--dry-run` protection. It can be
includes shell pipeline support, and `--dry-run` protection. It is
used at the command line, in scripts or via its [API](/rc).
Users have called rclone *"The Swiss army knife of cloud storage"* and
Users call rclone *"The Swiss army knife of cloud storage"*, and
*"Technology indistinguishable from magic"*.
Rclone really looks after your data. It preserves timestamps and
verifies your data at all times. Transfers over limited bandwidth;
verifies checksums at all times. Transfers over limited bandwidth;
intermittent connections, or subject to quota can be restarted, from
the last good file transferred. You can
[check](/commands/rclone_check/) the integrity of your files. Where
possible, rclone employs server side transfers to minimise local
bandwidth use and transfers from one provider to another without
using your local disk.
using local disk.
Virtual backends wrap local and cloud file systems to apply
[encryption](/crypt/),
@ -48,9 +47,9 @@ Virtual backends wrap local and cloud file systems to apply
[chunking](/chunker/) and
[joining](/union/).
Rclone can [mount](/commands/rclone_mount/) any local, cloud or
Rclone [mounts](/commands/rclone_mount/) any local, cloud or
virtual filesystem as a disk on Windows,
macOS, linux and FreeBSD, and also serve these over
macOS, linux and FreeBSD, and also serves these over
[SFTP](/commands/rclone_serve_sftp/),
[HTTP](/commands/rclone_serve_http/),
[WebDAV](/commands/rclone_serve_webdav/),
@ -64,14 +63,14 @@ Fedora, Brew and Chocolatey repos. include rclone. For the latest
version [downloading from rclone.org](/downloads/) is recommended.
Rclone is widely used on Linux, Windows and Mac. Third party
developers have built innovative backup, restore, GUI and business
developers create innovative backup, restore, GUI and business
process solutions using the rclone command line or API.
Let rclone do the heavy lifting of communicating with cloud storage.
Rclone does the heavy lifting of communicating with cloud storage.
## What can rclone do for you {#what}
## What can rclone do for you? {#what}
Rclone can help you:
Rclone helps you:
- Backup (and encrypt) files to cloud storage
- Restore (and decrypt) files from cloud storage
@ -99,7 +98,7 @@ Rclone can help you:
## Supported providers {#providers}
(There are many other providers, built on standard protocols such as
(There are many others, built on standard protocols such as
WebDAV or S3, that work out of the box.)
{{< provider_list >}}

View file

@ -1,7 +1,6 @@
---
title: "Alias"
description: "Remote Aliases"
date: "2018-01-30"
---
{{< icon "fa fa-link" >}} Alias

View file

@ -1,7 +1,6 @@
---
title: "Amazon Drive"
description: "Rclone docs for Amazon Drive"
date: "2017-06-10"
---
{{< icon "fab fa-amazon" >}} Amazon Drive

View file

@ -1,7 +1,6 @@
---
title: "Authors"
description: "Rclone Authors and Contributors"
date: "2016-11-02"
---
Authors

View file

@ -1,7 +1,6 @@
---
title: "Microsoft Azure Blob Storage"
description: "Rclone docs for Microsoft Azure Blob Storage"
date: "2017-07-30"
---
{{< icon "fab fa-windows" >}} Microsoft Azure Blob Storage

View file

@ -1,7 +1,6 @@
---
title: "B2"
description: "Backblaze B2"
date: "2016-10-25"
---
{{< icon "fa fa-fire" >}} Backblaze B2

View file

@ -1,7 +1,6 @@
---
title: "Box"
description: "Rclone docs for Box"
date: "2015-10-14"
---
{{< icon "fa fa-archive" >}} Box

View file

@ -1,7 +1,6 @@
---
title: "Bugs"
description: "Rclone Bugs and Limitations"
date: "2019-08-04"
---
# Bugs and Limitations

View file

@ -1,7 +1,6 @@
---
title: "Cache"
description: "Rclone docs for cache remote"
date: "2017-09-03"
---
{{< icon "fa fa-archive" >}} Cache (BETA)
@ -344,6 +343,8 @@ The username of the Plex user
The password of the Plex user
**NB** Input to this must be obscured - see [rclone obscure](/commands/rclone_obscure/).
- Config: plex_password
- Env Var: RCLONE_CACHE_PLEX_PASSWORD
- Type: string

View file

@ -1,11 +1,100 @@
---
title: "Documentation"
description: "Rclone Changelog"
date: "2020-05-27"
---
# Changelog
## v1.52.3 - 2020-08-07
[See commits](https://github.com/rclone/rclone/compare/v1.52.2...v1.52.3)
* Bug Fixes
* docs
* Disable smart typography (eg en-dash) in MANUAL.* and man page (Nick Craig-Wood)
* Update install.md to reflect minimum Go version (Evan Harris)
* Update install from source instructions (Nick Craig-Wood)
* make_manual: Support SOURCE_DATE_EPOCH (Morten Linderud)
* log: Fix --use-json-log going to stderr not --log-file on Windows (Nick Craig-Wood)
* serve dlna: Fix file list on Samsung Series 6+ TVs (Matteo Pietro Dazzi)
* sync: Fix deadlock with --track-renames-strategy modtime (Nick Craig-Wood)
* Cache
* Fix moveto/copyto remote:file remote:file2 (Nick Craig-Wood)
* Drive
* Stop using root_folder_id as a cache (Nick Craig-Wood)
* Make dangling shortcuts appear in listings (Nick Craig-Wood)
* Drop "Disabling ListR" messages down to debug (Nick Craig-Wood)
* Workaround and policy for Google Drive API (Dmitry Ustalov)
* FTP
* Add note to docs about home vs root directory selection (Nick Craig-Wood)
* Onedrive
* Fix reverting to Copy when Move would have worked (Nick Craig-Wood)
* Avoid comma rendered in URL in onedrive.md (Kevin)
* Pcloud
* Fix oauth on European region "eapi.pcloud.com" (Nick Craig-Wood)
* S3
* Fix bucket Region auto detection when Region unset in config (Nick Craig-Wood)
## v1.52.2 - 2020-06-24
[See commits](https://github.com/rclone/rclone/compare/v1.52.1...v1.52.2)
* Bug Fixes
* build
* Fix docker release build action (Nick Craig-Wood)
* Fix custom timezone in Docker image (NoLooseEnds)
* check: Fix misleading message which printed errors instead of differences (Nick Craig-Wood)
* errors: Add WSAECONNREFUSED and more to the list of retriable Windows errors (Nick Craig-Wood)
* rcd: Fix incorrect prometheus metrics (Gary Kim)
* serve restic: Fix flags so they use environment variables (Nick Craig-Wood)
* serve webdav: Fix flags so they use environment variables (Nick Craig-Wood)
* sync: Fix --track-renames-strategy modtime (Nick Craig-Wood)
* Drive
* Fix not being able to delete a directory with a trashed shortcut (Nick Craig-Wood)
* Fix creating a directory inside a shortcut (Nick Craig-Wood)
* Fix --drive-impersonate with cached root_folder_id (Nick Craig-Wood)
* SFTP
* Fix SSH key PEM loading (Zac Rubin)
* Swift
* Speed up deletes by not retrying segment container deletes (Nick Craig-Wood)
* Tardigrade
* Upgrade to uplink v1.1.1 (Caleb Case)
* WebDAV
* Fix free/used display for rclone about/df for certain backends (Nick Craig-Wood)
## v1.52.1 - 2020-06-10
[See commits](https://github.com/rclone/rclone/compare/v1.52.0...v1.52.1)
* Bug Fixes
* lib/file: Fix SetSparse on Windows 7 which fixes downloads of files > 250MB (Nick Craig-Wood)
* build
* Update go.mod to go1.14 to enable -mod=vendor build (Nick Craig-Wood)
* Remove quicktest from Dockerfile (Nick Craig-Wood)
* Build Docker images with GitHub actions (Matteo Pietro Dazzi)
* Update Docker build workflows (Nick Craig-Wood)
* Set user_allow_other in /etc/fuse.conf in the Docker image (Nick Craig-Wood)
* Fix xgo build after go1.14 go.mod update (Nick Craig-Wood)
* docs
* Add link to source and modified time to footer of every page (Nick Craig-Wood)
* Remove manually set dates and use git dates instead (Nick Craig-Wood)
* Minor tense, punctuation, brevity and positivity changes for the home page (edwardxml)
* Remove leading slash in page reference in footer when present (Nick Craig-Wood)
* Note commands which need obscured input in the docs (Nick Craig-Wood)
* obscure: Write more help as we are referencing it elsewhere (Nick Craig-Wood)
* VFS
* Fix OS vs Unix path confusion - fixes ChangeNotify on Windows (Nick Craig-Wood)
* Drive
* Fix missing items when listing using --fast-list / ListR (Nick Craig-Wood)
* Putio
* Fix panic on Object.Open (Cenk Alti)
* S3
* Fix upload of single files into buckets without create permission (Nick Craig-Wood)
* Fix --header-upload (Nick Craig-Wood)
* Tardigrade
* Fix listing bug by upgrading to v1.0.7
* Set UserAgent to rclone (Caleb Case)
## v1.52.0 - 2020-05-27
Special thanks to Martin Michlmayr for proof reading and correcting

View file

@ -1,7 +1,6 @@
---
title: "Chunker"
description: "Split-chunking overlay remote"
date: "2019-08-30"
---
{{< icon "fa fa-cut" >}}Chunker (BETA)

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone"
description: "Show help for rclone commands, flags and backends."
slug: rclone
@ -66,7 +65,7 @@ See the [global flags page](/flags/) for global options not listed here.
* [rclone move](/commands/rclone_move/) - Move files from source to dest.
* [rclone moveto](/commands/rclone_moveto/) - Move file or directory from source to dest.
* [rclone ncdu](/commands/rclone_ncdu/) - Explore a remote with a text based user interface.
* [rclone obscure](/commands/rclone_obscure/) - Obscure password for use in the rclone.conf
* [rclone obscure](/commands/rclone_obscure/) - Obscure password for use in the rclone config file
* [rclone purge](/commands/rclone_purge/) - Remove the path and all of its contents.
* [rclone rc](/commands/rclone_rc/) - Run a command against a running rclone.
* [rclone rcat](/commands/rclone_rcat/) - Copies standard input to file on remote.

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone about"
description: "Get quota information from the remote."
slug: rclone_about

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone authorize"
description: "Remote authorization."
slug: rclone_authorize

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone backend"
description: "Run a backend specific command."
slug: rclone_backend

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone cat"
description: "Concatenates any files and sends them to stdout."
slug: rclone_cat

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone check"
description: "Checks the files in the source and destination match."
slug: rclone_check

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone cleanup"
description: "Clean up the remote if possible"
slug: rclone_cleanup

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone config"
description: "Enter an interactive configuration session."
slug: rclone_config

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone config create"
description: "Create a new remote with name, type and options."
slug: rclone_config_create

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone config delete"
description: "Delete an existing remote `name`."
slug: rclone_config_delete

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone config disconnect"
description: "Disconnects user from remote"
slug: rclone_config_disconnect

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone config dump"
description: "Dump the config file as JSON."
slug: rclone_config_dump

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone config edit"
description: "Enter an interactive configuration session."
slug: rclone_config_edit

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone config file"
description: "Show path of configuration file in use."
slug: rclone_config_file

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone config password"
description: "Update password in an existing remote."
slug: rclone_config_password

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone config providers"
description: "List in JSON format all the providers and options."
slug: rclone_config_providers

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone config reconnect"
description: "Re-authenticates user with remote."
slug: rclone_config_reconnect

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone config show"
description: "Print (decrypted) config file, or the config for a single remote."
slug: rclone_config_show

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone config update"
description: "Update options in an existing remote."
slug: rclone_config_update

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone config userinfo"
description: "Prints info about logged in user of remote."
slug: rclone_config_userinfo

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone copy"
description: "Copy files from source to dest, skipping already copied"
slug: rclone_copy

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone copyto"
description: "Copy files from source to dest, skipping already copied"
slug: rclone_copyto

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone copyurl"
description: "Copy url content to dest."
slug: rclone_copyurl

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone cryptcheck"
description: "Cryptcheck checks the integrity of a crypted remote."
slug: rclone_cryptcheck

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone cryptdecode"
description: "Cryptdecode returns unencrypted file names."
slug: rclone_cryptdecode

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone dedupe"
description: "Interactively find duplicate files and delete/rename them."
slug: rclone_dedupe

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone delete"
description: "Remove the contents of path."
slug: rclone_delete

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone deletefile"
description: "Remove a single file from remote."
slug: rclone_deletefile

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone genautocomplete"
description: "Output completion script for a given shell."
slug: rclone_genautocomplete

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone genautocomplete bash"
description: "Output bash completion script for rclone."
slug: rclone_genautocomplete_bash

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone genautocomplete fish"
description: "Output fish completion script for rclone."
slug: rclone_genautocomplete_fish

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone genautocomplete zsh"
description: "Output zsh completion script for rclone."
slug: rclone_genautocomplete_zsh

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone gendocs"
description: "Output markdown docs for rclone to the directory supplied."
slug: rclone_gendocs

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone hashsum"
description: "Produces a hashsum file for all the objects in the path."
slug: rclone_hashsum

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone link"
description: "Generate public link to file/folder."
slug: rclone_link

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone listremotes"
description: "List all the remotes in the config file."
slug: rclone_listremotes

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone ls"
description: "List the objects in the path with size and path."
slug: rclone_ls

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone lsd"
description: "List all directories/containers/buckets in the path."
slug: rclone_lsd

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone lsf"
description: "List directories and objects in remote:path formatted for parsing"
slug: rclone_lsf

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone lsjson"
description: "List directories and objects in the path in JSON format."
slug: rclone_lsjson

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone lsl"
description: "List the objects in path with modification time, size and path."
slug: rclone_lsl

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone md5sum"
description: "Produces an md5sum file for all the objects in the path."
slug: rclone_md5sum

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone mkdir"
description: "Make the path if it doesn't already exist."
slug: rclone_mkdir

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone mount"
description: "Mount the remote as file system on a mountpoint."
slug: rclone_mount

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone move"
description: "Move files from source to dest."
slug: rclone_move

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone moveto"
description: "Move file or directory from source to dest."
slug: rclone_moveto

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone ncdu"
description: "Explore a remote with a text based user interface."
slug: rclone_ncdu

View file

@ -1,18 +1,30 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone obscure"
description: "Obscure password for use in the rclone.conf"
description: "Obscure password for use in the rclone config file"
slug: rclone_obscure
url: /commands/rclone_obscure/
# autogenerated - DO NOT EDIT, instead edit the source code in cmd/obscure/ and as part of making a release run "make commanddocs"
---
# rclone obscure
Obscure password for use in the rclone.conf
Obscure password for use in the rclone config file
## Synopsis
Obscure password for use in the rclone.conf
In the rclone config file, human readable passwords are
obscured. Obscuring them is done by encrypting them and writing them
out in base64. This is **not** a secure way of encrypting these
passwords as rclone can decrypt them - it is to prevent "eyedropping"
- namely someone seeing a password in the rclone config file by
accident.
Many equally important things (like access tokens) are not obscured in
the config file. However it is very hard to shoulder surf a 64
character hex token.
If you want to encrypt the config file then please use config file
encryption - see [rclone config](/commands/rclone_config/) for more
info.
```
rclone obscure password [flags]

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone purge"
description: "Remove the path and all of its contents."
slug: rclone_purge

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone rc"
description: "Run a command against a running rclone."
slug: rclone_rc

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone rcat"
description: "Copies standard input to file on remote."
slug: rclone_rcat

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone rcd"
description: "Run rclone listening to remote control commands only."
slug: rclone_rcd

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone rmdir"
description: "Remove the path if empty."
slug: rclone_rmdir

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone rmdirs"
description: "Remove empty directories under the path."
slug: rclone_rmdirs

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone serve"
description: "Serve a remote over a protocol."
slug: rclone_serve

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone serve dlna"
description: "Serve remote:path over DLNA"
slug: rclone_serve_dlna

View file

@ -1,5 +1,4 @@
---
date: 2020-05-27T16:09:49+01:00
title: "rclone serve ftp"
description: "Serve remote:path over FTP."
slug: rclone_serve_ftp

Some files were not shown because too many files have changed in this diff Show more