Compare commits

...

18 commits

Author SHA1 Message Date
Nick Craig-Wood
bd1fbcae12 Version v1.63.1 2023-07-17 14:31:02 +01:00
Nick Craig-Wood
7aa097c8ad build: add new sponsors page to docs 2023-07-17 14:19:16 +01:00
Nick Craig-Wood
10171be395 Start v1.63.1-DEV development 2023-07-17 14:16:54 +01:00
Vladislav Vorobev
80ff676f78 docs: no need to disable 2FA for Mail.ru Cloud anymore
This sentence was written at the time when backend used access token, nowadays, users need to generate and use application password instead, see #6398.
2023-07-14 10:28:45 +01:00
albertony
9410ccb27a box: fix reconnect failing with HTTP 400 Bad Request
The error is:

  Error: failed to configure token with jwt authentication: jwtutil: failed making auth request: 400 Bad Request

With the following additional debug information:

  jwtutil: Response Body: {"error":"invalid_grant","error_description":"Please check the 'aud' claim. Should be a string"}

Problem is that in jwt-go the RegisteredClaims type has Audience field (aud claim) that
is a list, while box apparantly expects it to be a singular string. In jwt-go v4 we
currently use there is an alternative type StandardClaims which matches what box wants.
Unfortunately StandardClaims is marked as deprecated, and is removed in the
newer v5 version, so we this is a short term fix only.

Fixes #7114
2023-07-14 10:27:51 +01:00
darix
3cd07af85b webdav: nextcloud chunking: add more guidance for the user to check the config 2023-07-10 14:38:17 +01:00
Nick Craig-Wood
cec75c873f operations: fix .rclonelink files not being converted back to symlinks
Before this change the new partial downloads code was causing symlinks
to be copied as regular files.

This was because the partial isn't named .rclonelink so the local
backend saves it as a normal file and renaming it to .rclonelink
doesn't cause it to become a symlink.

This fixes the problem by not copying .rclonelink files using the
partials mechanism but reverting to the previous --inplace behaviour.

This could potentially be fixed better in the future by changing the
local backend Move to change files to and from symlinks depending on
their name. However this was deemed too complicated for a point
release.

This also adds a test in the local backend. This test should ideally
be in operations but it isn't easy to put it there as operations knows
nothing of symlinks.

Fixes #7101
See: https://forum.rclone.org/t/reggression-in-v1-63-0-links-drops-the-rclonelink-extension/39483
2023-07-10 14:32:24 +01:00
Nick Craig-Wood
07d85297c0 local: fix partial directory read for corrupted filesystem
Before this change if a directory entry could be listed but not
lstat-ed then rclone would give an error and abort the directory
listing with the error

    failed to read directory entry: failed to read directory "XXX": lstat XXX

This change makes sure that the directory listing carries on even
after this kind of error.

The sync will be failed but it will carry on.

This problem was caused by a programming error setting the err
variable in an outer scope when it should have been using a local err
variable.

See: https://forum.rclone.org/t/sync-aborts-if-even-one-single-unreadable-folder-is-encountered/39653
2023-07-09 17:58:51 +01:00
Nick Craig-Wood
9aa714e659 smb: fix "Statfs failed: bucket or container name is needed" when mounting
Before this change, if you mounted the root of the smb then it would
give an error on rclone about and periodically in the mount logs:

    Statfs failed: bucket or container name is needed in remote

This fix makes the smb backend return empty usage in this case which
will stop the errors and show the default 1P of free space.

See: https://forum.rclone.org/t/error-statfs-failed-bucket-or-container-name-is-needed-in-remote/39631
2023-07-08 12:25:01 +01:00
Mahad
320c95048d docs: drive: Fix step 4 in "Making your own client_id" 2023-07-07 16:57:16 +01:00
Nick Craig-Wood
19dba3bf28 docs: update the number of providers supported 2023-07-06 16:12:35 +01:00
Nick Craig-Wood
842df59419 docs: remove old donate page 2023-07-06 10:51:08 +01:00
Paul
73d1b72bd7 webdav: nextcloud: fix must use /dav/files/USER endpoint not /webdav error
Fix https://github.com/rclone/rclone/issues/7103

Before this change the RegExp validating the endpoint URL was a bit
too strict allowing only /dav/files/USER due to chunking limitations.

This patch adds back support for /dav/files/USER/dir/subdir etc.

Co-authored-by: Nick Craig-Wood <nick@craig-wood.com>
2023-07-06 10:47:19 +01:00
Nick Craig-Wood
a3cfe5f7fe docs: update contact page on website 2023-07-05 12:19:21 +01:00
Nick Craig-Wood
9d3b8d9a9f operations: fix deadlock when using lsd/ls with --progress - Fixes #7102
The --progress flag overrides operations.SyncPrintf in order to do its
magic on stdout without interfering with other output.

Before this change the syncFprintf routine in operations (which is
used to print all output to stdout) was taking the
operations.StdoutMutex and the printProgress function in the
--progress routine was also attempting to take the same mutex causing
a deadlock.

This patch fixes the problem by moving the locking from the
syncFprintf function to SyncPrintf. It is then up to the function
overriding this to lock the StdoutMutex. This ensures the StdoutMutex
can never cause a deadlock.
2023-07-03 15:08:00 +01:00
Nick Craig-Wood
73e66a3798 dirtree: fix performance with large directories of directories and --fast-list
Before this change if using --fast-list on a directory with more than
a few thousand directories in it DirTree.CheckParents became very slow
taking up to 24 hours for a directory with 1,000,000 directories in
it.

This is because it becomes an O(N²) operation as DirTree.Find has to
search each directory in a linear fashion as it is stored as a slice.

This patch fixes the problem by scanning the DirTree for directories
before starting the CheckParents process so it never has to call
DirTree.Find.

After the fix calling DirTree.CheckParents on a directory with
1,000,000 directories in it will take about 1 second.

Anything which calls DirTree.Find can potentially have bad performance
so in the future we should redesign the DirTree to use a different
underlying datastructure or have an index.

https://forum.rclone.org/t/almost-24-hours-cpu-compute-time-during-sync-between-two-large-s3-buckets/39375/
2023-07-03 14:12:22 +01:00
Anagh Kumar Baranwal
f150e27abe build: fix macos builds for versions < 12
Signed-off-by: Anagh Kumar Baranwal <6824881+darthShadow@users.noreply.github.com>
2023-07-03 14:12:22 +01:00
Dean Attali
a72e082e6b docs: dropbox get client id, clarify you need to click a button 2023-07-03 14:12:22 +01:00
27 changed files with 731 additions and 381 deletions

426
MANUAL.html generated

File diff suppressed because it is too large Load diff

104
MANUAL.md generated
View file

@ -1,6 +1,6 @@
% rclone(1) User Manual
% Nick Craig-Wood
% Jun 30, 2023
% Jul 17, 2023
# Rclone syncs your files to cloud storage
@ -18,7 +18,7 @@
Rclone is a command-line program to manage files on cloud storage. It
is a feature-rich alternative to cloud vendors' web storage
interfaces. [Over 40 cloud storage products](#providers) support
interfaces. [Over 70 cloud storage products](#providers) support
rclone including S3 object stores, business & consumer file storage
services, as well as standard transfer protocols.
@ -2723,6 +2723,40 @@ See the [global flags page](https://rclone.org/flags/) for global options not li
* [rclone config](https://rclone.org/commands/rclone_config/) - Enter an interactive configuration session.
# rclone config redacted
Print redacted (decrypted) config file, or the redacted config for a single remote.
# Synopsis
This prints a redacted copy of the config file, either the
whole config file or for a given remote.
The config file will be redacted by replacing all passwords and other
sensitive info with XXX.
This makes the config file suitable for posting online for support.
It should be double checked before posting as the redaction may not be perfect.
```
rclone config redacted [<remote>] [flags]
```
# Options
```
-h, --help help for redacted
```
See the [global flags page](https://rclone.org/flags/) for global options not listed here.
# SEE ALSO
* [rclone config](https://rclone.org/commands/rclone_config/) - Enter an interactive configuration session.
# rclone config show
Print (decrypted) config file, or the config for a single remote.
@ -11852,7 +11886,7 @@ all files on `remote:` excluding those in root directory `dir` and sub
directories.
E.g. on Microsoft Windows `rclone ls remote: --exclude "*\[{JP,KR,HK}\]*"`
lists the files in `remote:` with `[JP]` or `[KR]` or `[HK]` in
lists the files in `remote:` without `[JP]` or `[KR]` or `[HK]` in
their name. Quotes prevent the shell from interpreting the `\`
characters.`\` characters escape the `[` and `]` so an rclone filter
treats them literally rather than as a character-range. The `{` and `}`
@ -15194,7 +15228,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 (default "rclone/v1.63.0")
--user-agent string Set the user-agent to a specified string (default "rclone/v1.63.1")
-v, --verbose count Print lots more stuff (repeat for more)
```
@ -27890,7 +27924,7 @@ to be the same account as the Dropbox you want to access)
6. Switch to the `Permissions` tab. Enable at least the following permissions: `account_info.read`, `files.metadata.write`, `files.content.write`, `files.content.read`, `sharing.write`. The `files.metadata.read` and `sharing.read` checkboxes will be marked too. Click `Submit`
7. Switch to the `Settings` tab. Fill `OAuth2 - Redirect URIs` as `http://localhost:53682/`
7. Switch to the `Settings` tab. Fill `OAuth2 - Redirect URIs` as `http://localhost:53682/` and click on `Add`
8. Find the `App key` and `App secret` values on the `Settings` tab. Use these values in rclone config to add a new remote or edit an existing remote. The `App key` setting corresponds to `client_id` in rclone config, the `App secret` corresponds to `client_secret`
@ -30874,7 +30908,7 @@ be the same account as the Google Drive you want to access)
"Google Drive API".
4. Click "Credentials" in the left-side panel (not "Create
credentials", which opens the wizard), then "Create credentials"
credentials", which opens the wizard).
5. If you already configured an "Oauth Consent Screen", then skip
to the next step; if not, click on "CONFIGURE CONSENT SCREEN" button
@ -33696,8 +33730,6 @@ y/e/d> y
[Mail.ru Cloud](https://cloud.mail.ru/) is a cloud storage provided by a Russian internet company [Mail.Ru Group](https://mail.ru). The official desktop client is [Disk-O:](https://disk-o.cloud/en), available on Windows and Mac OS.
Currently it is recommended to disable 2FA on Mail.ru accounts intended for rclone until it gets eventually implemented.
## Features highlights
- Paths may be as deep as required, e.g. `remote:directory/subdirectory`
@ -43570,6 +43602,27 @@ Options:
# Changelog
## v1.63.1 - 2023-07-17
[See commits](https://github.com/rclone/rclone/compare/v1.63.0...v1.63.1)
* Bug Fixes
* build: Fix macos builds for versions < 12 (Anagh Kumar Baranwal)
* dirtree: Fix performance with large directories of directories and `--fast-list` (Nick Craig-Wood)
* operations
* Fix deadlock when using `lsd`/`ls` with `--progress` (Nick Craig-Wood)
* Fix `.rclonelink` files not being converted back to symlinks (Nick Craig-Wood)
* doc fixes (Dean Attali, Mahad, Nick Craig-Wood, Sawada Tsunayoshi, Vladislav Vorobev)
* Local
* Fix partial directory read for corrupted filesystem (Nick Craig-Wood)
* Box
* Fix reconnect failing with HTTP 400 Bad Request (albertony)
* Smb
* Fix "Statfs failed: bucket or container name is needed" when mounting (Nick Craig-Wood)
* WebDAV
* Nextcloud: fix must use /dav/files/USER endpoint not /webdav error (Paul)
* Nextcloud chunking: add more guidance for the user to check the config (darix)
## v1.63.0 - 2023-06-30
[See commits](https://github.com/rclone/rclone/compare/v1.62.0...v1.63.0)
@ -49233,32 +49286,43 @@ put them back in again.` >}}
* zzq <i@zhangzqs.cn>
* mac-15 <usman.ilamdin@phpstudios.com>
# Contact the rclone project #
# Contact the rclone project
## Forum ##
## Forum
Forum for questions and general discussion:
* https://forum.rclone.org
- https://forum.rclone.org
## GitHub repository ##
## Business support
For business support or sponsorship enquiries please see:
- https://rclone.com/
- sponsorship@rclone.com
## GitHub repository
The project's repository is located at:
* https://github.com/rclone/rclone
- https://github.com/rclone/rclone
There you can file bug reports or contribute with pull requests.
## Twitter ##
## Twitter
You can also follow me on twitter for rclone announcements:
You can also follow Nick on twitter for rclone announcements:
* [@njcw](https://twitter.com/njcw)
- [@njcw](https://twitter.com/njcw)
## Email ##
## Email
Or if all else fails or you want to ask something private or
confidential email [Nick Craig-Wood](mailto:nick@craig-wood.com).
Please don't email me requests for help - those are better directed to
the forum. Thanks!
confidential
- info@rclone.com
Please don't email requests for help to this address - those are
better directed to the forum unless you'd like to sign up for business
support.

91
MANUAL.txt generated
View file

@ -1,6 +1,6 @@
rclone(1) User Manual
Nick Craig-Wood
Jun 30, 2023
Jul 17, 2023
Rclone syncs your files to cloud storage
@ -16,7 +16,7 @@ About rclone
Rclone is a command-line program to manage files on cloud storage. It is
a feature-rich alternative to cloud vendors' web storage interfaces.
Over 40 cloud storage products support rclone including S3 object
Over 70 cloud storage products support rclone including S3 object
stores, business & consumer file storage services, as well as standard
transfer protocols.
@ -2481,6 +2481,36 @@ SEE ALSO
- rclone config - Enter an interactive configuration session.
rclone config redacted
Print redacted (decrypted) config file, or the redacted config for a
single remote.
Synopsis
This prints a redacted copy of the config file, either the whole config
file or for a given remote.
The config file will be redacted by replacing all passwords and other
sensitive info with XXX.
This makes the config file suitable for posting online for support.
It should be double checked before posting as the redaction may not be
perfect.
rclone config redacted [<remote>] [flags]
Options
-h, --help help for redacted
See the global flags page for global options not listed here.
SEE ALSO
- rclone config - Enter an interactive configuration session.
rclone config show
Print (decrypted) config file, or the config for a single remote.
@ -11395,7 +11425,7 @@ all files on remote: excluding those in root directory dir and sub
directories.
E.g. on Microsoft Windows rclone ls remote: --exclude "*\[{JP,KR,HK}\]*"
lists the files in remote: with [JP] or [KR] or [HK] in their name.
lists the files in remote: without [JP] or [KR] or [HK] in their name.
Quotes prevent the shell from interpreting the \ characters.\ characters
escape the [ and ] so an rclone filter treats them literally rather than
as a character-range. The { and } define an rclone pattern list. For
@ -14738,7 +14768,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 (default "rclone/v1.63.0")
--user-agent string Set the user-agent to a specified string (default "rclone/v1.63.1")
-v, --verbose count Print lots more stuff (repeat for more)
Backend Flags
@ -27240,7 +27270,7 @@ Here is how to create your own Dropbox App ID for rclone:
Click Submit
7. Switch to the Settings tab. Fill OAuth2 - Redirect URIs as
http://localhost:53682/
http://localhost:53682/ and click on Add
8. Find the App key and App secret values on the Settings tab. Use
these values in rclone config to add a new remote or edit an
@ -30238,7 +30268,7 @@ Here is how to create your own Google Drive client ID for rclone:
"Google Drive API".
4. Click "Credentials" in the left-side panel (not "Create
credentials", which opens the wizard), then "Create credentials"
credentials", which opens the wizard).
5. If you already configured an "Oauth Consent Screen", then skip to
the next step; if not, click on "CONFIGURE CONSENT SCREEN" button
@ -33101,9 +33131,6 @@ Mail.ru Cloud is a cloud storage provided by a Russian internet company
Mail.Ru Group. The official desktop client is Disk-O:, available on
Windows and Mac OS.
Currently it is recommended to disable 2FA on Mail.ru accounts intended
for rclone until it gets eventually implemented.
Features highlights
- Paths may be as deep as required, e.g. remote:directory/subdirectory
@ -43068,6 +43095,35 @@ Options:
Changelog
v1.63.1 - 2023-07-17
See commits
- Bug Fixes
- build: Fix macos builds for versions < 12 (Anagh Kumar Baranwal)
- dirtree: Fix performance with large directories of directories
and --fast-list (Nick Craig-Wood)
- operations
- Fix deadlock when using lsd/ls with --progress (Nick
Craig-Wood)
- Fix .rclonelink files not being converted back to symlinks
(Nick Craig-Wood)
- doc fixes (Dean Attali, Mahad, Nick Craig-Wood, Sawada
Tsunayoshi, Vladislav Vorobev)
- Local
- Fix partial directory read for corrupted filesystem (Nick
Craig-Wood)
- Box
- Fix reconnect failing with HTTP 400 Bad Request (albertony)
- Smb
- Fix "Statfs failed: bucket or container name is needed" when
mounting (Nick Craig-Wood)
- WebDAV
- Nextcloud: fix must use /dav/files/USER endpoint not /webdav
error (Paul)
- Nextcloud chunking: add more guidance for the user to check the
config (darix)
v1.63.0 - 2023-06-30
See commits
@ -50160,6 +50216,13 @@ Forum for questions and general discussion:
- https://forum.rclone.org
Business support
For business support or sponsorship enquiries please see:
- https://rclone.com/
- sponsorship@rclone.com
GitHub repository
The project's repository is located at:
@ -50170,12 +50233,16 @@ There you can file bug reports or contribute with pull requests.
Twitter
You can also follow me on twitter for rclone announcements:
You can also follow Nick on twitter for rclone announcements:
- [@njcw](https://twitter.com/njcw)
Email
Or if all else fails or you want to ask something private or
confidential email Nick Craig-Wood. Please don't email me requests for
help - those are better directed to the forum. Thanks!
confidential
- info@rclone.com
Please don't email requests for help to this address - those are better
directed to the forum unless you'd like to sign up for business support.

View file

@ -1 +1 @@
v1.63.0
v1.63.1

View file

@ -77,7 +77,7 @@ var (
)
type boxCustomClaims struct {
jwt.RegisteredClaims
jwt.StandardClaims
BoxSubType string `json:"box_sub_type,omitempty"`
}
@ -206,12 +206,14 @@ func getClaims(boxConfig *api.ConfigJSON, boxSubType string) (claims *boxCustomC
}
claims = &boxCustomClaims{
RegisteredClaims: jwt.RegisteredClaims{
ID: val,
//lint:ignore SA1019 since we need to use jwt.StandardClaims even if deprecated in jwt-go v4 until a more permanent solution is ready in time before jwt-go v5 where it is removed entirely
//nolint:staticcheck // Don't include staticcheck when running golangci-lint to avoid SA1019
StandardClaims: jwt.StandardClaims{
Id: val,
Issuer: boxConfig.BoxAppSettings.ClientID,
Subject: boxConfig.EnterpriseID,
Audience: jwt.ClaimStrings{tokenURL},
ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Second * 45)),
Audience: tokenURL,
ExpiresAt: time.Now().Add(time.Second * 45).Unix(),
},
BoxSubType: boxSubType,
}

View file

@ -516,7 +516,7 @@ func (f *Fs) List(ctx context.Context, dir string) (entries fs.DirEntries, err e
continue
}
}
err = fmt.Errorf("failed to read directory %q: %w", namepath, fierr)
fierr = fmt.Errorf("failed to get info about directory entry %q: %w", namepath, fierr)
fs.Errorf(dir, "%v", fierr)
_ = accounting.Stats(ctx).Error(fserrors.NoRetryError(fierr)) // fail the sync
continue

View file

@ -19,6 +19,7 @@ import (
"github.com/rclone/rclone/fs/filter"
"github.com/rclone/rclone/fs/hash"
"github.com/rclone/rclone/fs/object"
"github.com/rclone/rclone/fs/operations"
"github.com/rclone/rclone/fstest"
"github.com/rclone/rclone/lib/file"
"github.com/rclone/rclone/lib/readers"
@ -514,3 +515,43 @@ func TestFilterSymlinkCopyLinks(t *testing.T) {
func TestFilterSymlinkLinks(t *testing.T) {
testFilterSymlink(t, false)
}
func TestCopySymlink(t *testing.T) {
ctx := context.Background()
r := fstest.NewRun(t)
defer r.Finalise()
when := time.Now()
f := r.Flocal.(*Fs)
// Create a file and a symlink to it
r.WriteFile("src/file.txt", "hello world", when)
require.NoError(t, os.Symlink("file.txt", filepath.Join(r.LocalName, "src", "link.txt")))
defer func() {
// Reset -L/-l mode
f.opt.FollowSymlinks = false
f.opt.TranslateSymlinks = false
f.lstat = os.Lstat
}()
// Set fs into "-l/--links" mode
f.opt.FollowSymlinks = false
f.opt.TranslateSymlinks = true
f.lstat = os.Lstat
// Create dst
require.NoError(t, f.Mkdir(ctx, "dst"))
// Do copy from src into dst
src, err := f.NewObject(ctx, "src/link.txt.rclonelink")
require.NoError(t, err)
require.NotNil(t, src)
dst, err := operations.Copy(ctx, f, nil, "dst/link.txt.rclonelink", src)
require.NoError(t, err)
require.NotNil(t, dst)
// Test that we made a symlink and it has the right contents
dstPath := filepath.Join(r.LocalName, "dst", "link.txt")
linkContents, err := os.Readlink(dstPath)
require.NoError(t, err)
assert.Equal(t, "file.txt", linkContents)
}

View file

@ -447,7 +447,8 @@ func (f *Fs) List(ctx context.Context, dir string) (entries fs.DirEntries, err e
func (f *Fs) About(ctx context.Context) (_ *fs.Usage, err error) {
share, dir := f.split("/")
if share == "" {
return nil, fs.ErrorListBucketRequired
// Just return empty info rather than an error if called on the root
return &fs.Usage{}, nil
}
dir = f.toSambaPath(dir)

View file

@ -14,7 +14,6 @@ import (
"io"
"net/http"
"path"
"strings"
"github.com/rclone/rclone/fs"
"github.com/rclone/rclone/lib/readers"
@ -41,10 +40,6 @@ func (f *Fs) setUploadChunkSize(cs fs.SizeSuffix) (old fs.SizeSuffix, err error)
return
}
func (f *Fs) getChunksUploadURL() string {
return strings.Replace(f.endpointURL, "/dav/files/", "/dav/uploads/", 1)
}
func (o *Object) getChunksUploadDir() (string, error) {
hasher := md5.New()
_, err := hasher.Write([]byte(o.filePath()))
@ -55,12 +50,16 @@ func (o *Object) getChunksUploadDir() (string, error) {
return uploadDir, nil
}
func (f *Fs) verifyChunkConfig() error {
if f.opt.ChunkSize != 0 && !validateNextCloudChunkedURL.MatchString(f.endpointURL) {
return errors.New("chunked upload with nextcloud must use /dav/files/USER endpoint not /webdav")
func (f *Fs) getChunksUploadURL() (string, error) {
submatch := nextCloudURLRegex.FindStringSubmatch(f.endpointURL)
if submatch == nil {
return "", errors.New("the remote url looks incorrect. Note that nextcloud chunked uploads require you to use the /dav/files/USER endpoint instead of /webdav. Please check 'rclone config show remotename' to verify that the url field ends in /dav/files/USERNAME")
}
return nil
baseURL, user := submatch[1], submatch[2]
chunksUploadURL := fmt.Sprintf("%s/dav/uploads/%s/", baseURL, user)
return chunksUploadURL, nil
}
func (o *Object) shouldUseChunkedUpload(src fs.ObjectInfo) bool {

View file

@ -569,7 +569,8 @@ func (f *Fs) fetchAndSetBearerToken() error {
return nil
}
var validateNextCloudChunkedURL = regexp.MustCompile(`^.*/dav/files/[^/]+/?$`)
// The WebDAV url can optionally be suffixed with a path. This suffix needs to be ignored for determining the temporary upload directory of chunks.
var nextCloudURLRegex = regexp.MustCompile(`^(.*)/dav/files/([^/]+)`)
// setQuirks adjusts the Fs for the vendor passed in
func (f *Fs) setQuirks(ctx context.Context, vendor string) error {
@ -592,11 +593,18 @@ func (f *Fs) setQuirks(ctx context.Context, vendor string) error {
f.propsetMtime = true
f.hasOCSHA1 = true
f.canChunk = true
if err := f.verifyChunkConfig(); err != nil {
return err
if f.opt.ChunkSize == 0 {
fs.Logf(nil, "Chunked uploads are disabled because nextcloud_chunk_size is set to 0")
} else {
chunksUploadURL, err := f.getChunksUploadURL()
if err != nil {
return err
}
f.chunksUploadURL = chunksUploadURL
fs.Logf(nil, "Chunks temporary upload directory: %s", f.chunksUploadURL)
}
f.chunksUploadURL = f.getChunksUploadURL()
fs.Logf(nil, "Chunks temporary upload directory: %s", f.chunksUploadURL)
case "sharepoint":
// To mount sharepoint, two Cookies are required
// They have to be set instead of BasicAuth

View file

@ -114,7 +114,7 @@ commands_order = [
ignore_docs = [
"downloads.md",
"privacy.md",
"donate.md",
"sponsor.md",
]
def read_doc(doc):

View file

@ -21,7 +21,7 @@ notoc: true
Rclone is a command-line program to manage files on cloud storage. It
is a feature-rich alternative to cloud vendors' web storage
interfaces. [Over 40 cloud storage products](#providers) support
interfaces. [Over 70 cloud storage products](#providers) support
rclone including S3 object stores, business & consumer file storage
services, as well as standard transfer protocols.

View file

@ -5,6 +5,27 @@ description: "Rclone Changelog"
# Changelog
## v1.63.1 - 2023-07-17
[See commits](https://github.com/rclone/rclone/compare/v1.63.0...v1.63.1)
* Bug Fixes
* build: Fix macos builds for versions < 12 (Anagh Kumar Baranwal)
* dirtree: Fix performance with large directories of directories and `--fast-list` (Nick Craig-Wood)
* operations
* Fix deadlock when using `lsd`/`ls` with `--progress` (Nick Craig-Wood)
* Fix `.rclonelink` files not being converted back to symlinks (Nick Craig-Wood)
* doc fixes (Dean Attali, Mahad, Nick Craig-Wood, Sawada Tsunayoshi, Vladislav Vorobev)
* Local
* Fix partial directory read for corrupted filesystem (Nick Craig-Wood)
* Box
* Fix reconnect failing with HTTP 400 Bad Request (albertony)
* Smb
* Fix "Statfs failed: bucket or container name is needed" when mounting (Nick Craig-Wood)
* WebDAV
* Nextcloud: fix must use /dav/files/USER endpoint not /webdav error (Paul)
* Nextcloud chunking: add more guidance for the user to check the config (darix)
## v1.63.0 - 2023-06-30
[See commits](https://github.com/rclone/rclone/compare/v1.62.0...v1.63.0)

View file

@ -3,31 +3,42 @@ title: "Contact"
description: "Contact the rclone project"
---
# Contact the rclone project #
# Contact the rclone project
## Forum ##
## Forum
Forum for questions and general discussion:
* https://forum.rclone.org
- https://forum.rclone.org
## GitHub repository ##
## Business support
For business support or sponsorship enquiries please see:
- https://rclone.com/
- sponsorship@rclone.com
## GitHub repository
The project's repository is located at:
* https://github.com/rclone/rclone
- https://github.com/rclone/rclone
There you can file bug reports or contribute with pull requests.
## Twitter ##
## Twitter
You can also follow me on twitter for rclone announcements:
You can also follow Nick on twitter for rclone announcements:
* [@njcw](https://twitter.com/njcw)
- [@njcw](https://twitter.com/njcw)
## Email ##
## Email
Or if all else fails or you want to ask something private or
confidential email [Nick Craig-Wood](mailto:nick@craig-wood.com).
Please don't email me requests for help - those are better directed to
the forum. Thanks!
confidential
- info@rclone.com
Please don't email requests for help to this address - those are
better directed to the forum unless you'd like to sign up for business
support.

View file

@ -1,68 +0,0 @@
---
title: "Donations"
description: "Donations to the rclone project."
type: page
---
# {{< icon "fa fa-heart heart" >}} Donations to the rclone project
Rclone is a free open-source project with thousands of contributions
from volunteers all round the world and I would like to thank all of
you for donating your time to the project.
However, maintaining rclone is a lot of work - easily the equivalent
of a **full time job** - for me. Nothing stands still in the world of
cloud storage. Rclone needs constant attention adapting to changes by
cloud providers, adding new providers, adding new features, keeping
the integration tests working, fixing bugs and many more things!
I love doing the work and I'd like to spend more time doing it - your
support helps make that possible.
Thank you :-)
{{< nick >}}
PS I'm available for rclone and object storage related consultancy -
[email me](mailto:nick@craig-wood.com) for more info.
{{< monthly_donations >}}
## Personal users
If you are a personal user and you would like to support the project
with sponsorship as a way of saying thank you that would be most
appreciated. {{< icon "fa fa-heart heart" >}}
## Business users
If your business distributes rclone as part of its products (which the
generous MIT licence allows) or uses it internally then it would make
business sense to sponsor the rclone project to ensure that the
project you rely on stays healthy and well maintained.
If you run one of the cloud storage providers that rclone supports and
rclone is driving revenue your way then you know it makes sense to
sponsor the project. {{< icon "far fa-smile" >}}
Note that if you choose the "GitHub Sponsors" option they will provide
proper tax invoices appropriate for your country.
## Monthly donations
Monthly donations help keep rclone development sustainable in the long
run so this is the preferred option. A small amount every month is
much better than a one off donation as it allows planning for the
future.
{{< monthly_donations >}}
## One off donations
If you don't want to contribute monthly then of course we'd love a one
off donation.
{{< one_off_donations >}}
If you require a receipt or wish to contribute in a different way then
please [drop me an email](mailto:nick@craig-wood.com).

View file

@ -1522,7 +1522,7 @@ be the same account as the Google Drive you want to access)
"Google Drive API".
4. Click "Credentials" in the left-side panel (not "Create
credentials", which opens the wizard), then "Create credentials"
credentials", which opens the wizard).
5. If you already configured an "Oauth Consent Screen", then skip
to the next step; if not, click on "CONFIGURE CONSENT SCREEN" button

View file

@ -502,6 +502,6 @@ to be the same account as the Dropbox you want to access)
6. Switch to the `Permissions` tab. Enable at least the following permissions: `account_info.read`, `files.metadata.write`, `files.content.write`, `files.content.read`, `sharing.write`. The `files.metadata.read` and `sharing.read` checkboxes will be marked too. Click `Submit`
7. Switch to the `Settings` tab. Fill `OAuth2 - Redirect URIs` as `http://localhost:53682/`
7. Switch to the `Settings` tab. Fill `OAuth2 - Redirect URIs` as `http://localhost:53682/` and click on `Add`
8. Find the `App key` and `App secret` values on the `Settings` tab. Use these values in rclone config to add a new remote or edit an existing remote. The `App key` setting corresponds to `client_id` in rclone config, the `App secret` corresponds to `client_secret`

View file

@ -174,7 +174,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 (default "rclone/v1.63.0")
--user-agent string Set the user-agent to a specified string (default "rclone/v1.63.1")
-v, --verbose count Print lots more stuff (repeat for more)
```

View file

@ -8,8 +8,6 @@ versionIntroduced: "v1.50"
[Mail.ru Cloud](https://cloud.mail.ru/) is a cloud storage provided by a Russian internet company [Mail.Ru Group](https://mail.ru). The official desktop client is [Disk-O:](https://disk-o.cloud/en), available on Windows and Mac OS.
Currently it is recommended to disable 2FA on Mail.ru accounts intended for rclone until it gets eventually implemented.
## Features highlights
- Paths may be as deep as required, e.g. `remote:directory/subdirectory`

View file

@ -1 +1 @@
v1.63.0
v1.63.1

View file

@ -63,10 +63,12 @@ func (dt DirTree) AddEntry(entry fs.DirEntry) {
panic("unknown entry type")
}
remoteParent := parentDir(entry.Remote())
dt.CheckParent("", remoteParent)
dt.checkParent("", remoteParent, nil)
}
// Find returns the DirEntry for filePath or nil if not found
//
// None that Find does a O(N) search so can be slow
func (dt DirTree) Find(filePath string) (parentPath string, entry fs.DirEntry) {
parentPath = parentDir(filePath)
for _, entry := range dt[parentPath] {
@ -77,23 +79,52 @@ func (dt DirTree) Find(filePath string) (parentPath string, entry fs.DirEntry) {
return parentPath, nil
}
// CheckParent checks that dirPath has a *Dir in its parent
func (dt DirTree) CheckParent(root, dirPath string) {
if dirPath == root {
return
// checkParent checks that dirPath has a *Dir in its parent
//
// If dirs is not nil it must contain entries for every *Dir found in
// the tree. It is used to speed up the checking when calling this
// repeatedly.
func (dt DirTree) checkParent(root, dirPath string, dirs map[string]struct{}) {
var parentPath string
for {
if dirPath == root {
return
}
// Can rely on dirs to have all directories in it so
// we don't need to call Find.
if dirs != nil {
if _, found := dirs[dirPath]; found {
return
}
parentPath = parentDir(dirPath)
} else {
var entry fs.DirEntry
parentPath, entry = dt.Find(dirPath)
if entry != nil {
return
}
}
dt[parentPath] = append(dt[parentPath], fs.NewDir(dirPath, time.Now()))
if dirs != nil {
dirs[dirPath] = struct{}{}
}
dirPath = parentPath
}
parentPath, entry := dt.Find(dirPath)
if entry != nil {
return
}
dt[parentPath] = append(dt[parentPath], fs.NewDir(dirPath, time.Now()))
dt.CheckParent(root, parentPath)
}
// CheckParents checks every directory in the tree has *Dir in its parent
func (dt DirTree) CheckParents(root string) {
dirs := make(map[string]struct{})
// Find all the directories and stick them in dirs
for _, entries := range dt {
for _, entry := range entries {
if _, ok := entry.(fs.Directory); ok {
dirs[entry.Remote()] = struct{}{}
}
}
}
for dirPath := range dt {
dt.CheckParent(root, dirPath)
dt.checkParent(root, dirPath, dirs)
}
}

View file

@ -1,6 +1,7 @@
package dirtree
import (
"fmt"
"testing"
"github.com/rclone/rclone/fstest/mockdir"
@ -108,7 +109,7 @@ func TestDirTreeCheckParent(t *testing.T) {
sausage
`, dt.String())
dt.CheckParent("", "dir/subdir")
dt.checkParent("", "dir/subdir", nil)
assert.Equal(t, `/
dir/
@ -200,3 +201,21 @@ dir2/
`, dt.String())
}
func BenchmarkCheckParents(b *testing.B) {
for _, N := range []int{1e2, 1e3, 1e4, 1e5, 1e6} {
b.Run(fmt.Sprintf("%d", N), func(b *testing.B) {
b.StopTimer()
dt := New()
for i := 0; i < N; i++ {
remote := fmt.Sprintf("dir%09d/file%09d.txt", i, 1)
o := mockobject.New(remote)
dt.Add(o)
}
b.StartTimer()
for n := 0; n < b.N; n++ {
dt.CheckParents("")
}
})
}
}

View file

@ -358,7 +358,7 @@ func Copy(ctx context.Context, f fs.Fs, dst fs.Object, remote string, src fs.Obj
inplace = true
remotePartial = remote
)
if !ci.Inplace && f.Features().Move != nil && f.Features().PartialUploads {
if !ci.Inplace && f.Features().Move != nil && f.Features().PartialUploads && !strings.HasSuffix(remote, ".rclonelink") {
// Avoid making the leaf name longer if it's already lengthy to avoid
// trouble with file name length limits.
suffix := "." + random.String(8) + ".partial"
@ -926,10 +926,15 @@ func ListFn(ctx context.Context, f fs.Fs, fn func(fs.Object)) error {
// StdoutMutex mutex for synchronized output on stdout
var StdoutMutex sync.Mutex
// SyncPrintf is a global var holding the Printf function used in syncFprintf so that it can be overridden
// Note, despite name, does not provide sync and should not be called directly
// Call syncFprintf, which provides sync
// SyncPrintf is a global var holding the Printf function so that it
// can be overridden.
//
// This writes to stdout holding the StdoutMutex. If you are going to
// override it and write to os.Stdout then you should hold the
// StdoutMutex too.
var SyncPrintf = func(format string, a ...interface{}) {
StdoutMutex.Lock()
defer StdoutMutex.Unlock()
fmt.Printf(format, a...)
}
@ -937,14 +942,13 @@ var SyncPrintf = func(format string, a ...interface{}) {
//
// Ignores errors from Fprintf.
//
// Updated to print to terminal if no writer is defined
// This special behavior is used to allow easier replacement of the print to terminal code by progress
// Prints to stdout if w is nil
func syncFprintf(w io.Writer, format string, a ...interface{}) {
StdoutMutex.Lock()
defer StdoutMutex.Unlock()
if w == nil || w == os.Stdout {
SyncPrintf(format, a...)
} else {
StdoutMutex.Lock()
defer StdoutMutex.Unlock()
_, _ = fmt.Fprintf(w, format, a...)
}
}

View file

@ -1,4 +1,4 @@
package fs
// VersionTag of rclone
var VersionTag = "v1.63.0"
var VersionTag = "v1.63.1"

10
go.mod
View file

@ -50,12 +50,12 @@ require (
github.com/rclone/ftp v0.0.0-20230327202000-dadc1f64e87d
github.com/rfjakob/eme v1.1.2
github.com/rivo/uniseg v0.4.4
github.com/shirou/gopsutil/v3 v3.23.3
github.com/shirou/gopsutil/v3 v3.23.5
github.com/sirupsen/logrus v1.9.0
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
github.com/spf13/cobra v1.7.0
github.com/spf13/pflag v1.0.5
github.com/stretchr/testify v1.8.2
github.com/stretchr/testify v1.8.3
github.com/t3rm1n4l/go-mega v0.0.0-20230228171823-a01a2cda13ca
github.com/winfsp/cgofuse v1.5.1-0.20221118130120-84c0898ad2e0
github.com/xanzy/ssh-agent v0.3.3
@ -67,7 +67,7 @@ require (
golang.org/x/net v0.8.0
golang.org/x/oauth2 v0.6.0
golang.org/x/sync v0.1.0
golang.org/x/sys v0.7.0
golang.org/x/sys v0.8.0
golang.org/x/text v0.8.0
golang.org/x/time v0.3.0
google.golang.org/api v0.115.0
@ -120,13 +120,13 @@ require (
github.com/prometheus/common v0.37.0 // indirect
github.com/prometheus/procfs v0.8.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/shoenig/go-m1cpu v0.1.4 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/sony/gobreaker v0.5.0 // indirect
github.com/spacemonkeygo/monkit/v3 v3.0.19 // indirect
github.com/tklauser/go-sysconf v0.3.11 // indirect
github.com/tklauser/numcpus v0.6.0 // indirect
github.com/vivint/infectious v0.0.0-20200605153912-25a574ae18a3 // indirect
github.com/yusufpapurcu/wmi v1.2.2 // indirect
github.com/yusufpapurcu/wmi v1.2.3 // indirect
github.com/zeebo/blake3 v0.2.3 // indirect
github.com/zeebo/errs v1.3.0 // indirect
go.opencensus.io v0.24.0 // indirect

24
go.sum
View file

@ -428,12 +428,12 @@ github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6po
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8=
github.com/shirou/gopsutil/v3 v3.23.3 h1:Syt5vVZXUDXPEXpIBt5ziWsJ4LdSAAxF4l/xZeQgSEE=
github.com/shirou/gopsutil/v3 v3.23.3/go.mod h1:lSBNN6t3+D6W5e5nXTxc8KIMMVxAcS+6IJlffjRRlMU=
github.com/shoenig/go-m1cpu v0.1.4 h1:SZPIgRM2sEF9NJy50mRHu9PKGwxyyTTJIWvCtgVbozs=
github.com/shoenig/go-m1cpu v0.1.4/go.mod h1:Wwvst4LR89UxjeFtLRMrpgRiyY4xPsejnVZym39dbAQ=
github.com/shoenig/test v0.6.3 h1:GVXWJFk9PiOjN0KoJ7VrJGH6uLPnqxR7/fe3HUPfE0c=
github.com/shoenig/test v0.6.3/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
github.com/shirou/gopsutil/v3 v3.23.5 h1:5SgDCeQ0KW0S4N0znjeM/eFHXXOKyv2dVNgRq/c9P6Y=
github.com/shirou/gopsutil/v3 v3.23.5/go.mod h1:Ng3Maa27Q2KARVJ0SPZF5NdrQSC3XHKP8IIWrHgMeLY=
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
@ -470,8 +470,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/t3rm1n4l/go-mega v0.0.0-20230228171823-a01a2cda13ca h1:I9rVnNXdIkij4UvMT7OmKhH9sOIvS8iXkxfPdnn9wQA=
github.com/t3rm1n4l/go-mega v0.0.0-20230228171823-a01a2cda13ca/go.mod h1:suDIky6yrK07NnaBadCB4sS0CqFOvUK91lH7CR+JlDA=
github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
@ -496,8 +496,8 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yunify/qingstor-sdk-go/v3 v3.2.0 h1:9sB2WZMgjwSUNZhrgvaNGazVltoFUUfuS9f0uCWtTr8=
github.com/yunify/qingstor-sdk-go/v3 v3.2.0/go.mod h1:KciFNuMu6F4WLk9nGwwK69sCGKLCdd9f97ac/wfumS4=
github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
github.com/zeebo/assert v1.1.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
github.com/zeebo/assert v1.3.1 h1:vukIABvugfNMZMQO1ABsyQDJDTVQbn+LWSMy1ol1h6A=
github.com/zeebo/assert v1.3.1/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
@ -691,8 +691,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=

126
rclone.1 generated
View file

@ -1,7 +1,7 @@
.\"t
.\" Automatically generated by Pandoc 2.9.2.1
.\"
.TH "rclone" "1" "Jun 30, 2023" "User Manual" ""
.TH "rclone" "1" "Jul 17, 2023" "User Manual" ""
.hy
.SH Rclone syncs your files to cloud storage
.PP
@ -24,7 +24,7 @@ Donate. (https://rclone.org/donate/)
Rclone is a command-line program to manage files on cloud storage.
It is a feature-rich alternative to cloud vendors\[aq] web storage
interfaces.
Over 40 cloud storage products support rclone including S3 object
Over 70 cloud storage products support rclone including S3 object
stores, business & consumer file storage services, as well as standard
transfer protocols.
.PP
@ -3456,6 +3456,42 @@ not listed here.
.IP \[bu] 2
rclone config (https://rclone.org/commands/rclone_config/) - Enter an
interactive configuration session.
.SH rclone config redacted
.PP
Print redacted (decrypted) config file, or the redacted config for a
single remote.
.SH Synopsis
.PP
This prints a redacted copy of the config file, either the whole config
file or for a given remote.
.PP
The config file will be redacted by replacing all passwords and other
sensitive info with XXX.
.PP
This makes the config file suitable for posting online for support.
.PP
It should be double checked before posting as the redaction may not be
perfect.
.IP
.nf
\f[C]
rclone config redacted [<remote>] [flags]
\f[R]
.fi
.SH Options
.IP
.nf
\f[C]
-h, --help help for redacted
\f[R]
.fi
.PP
See the global flags page (https://rclone.org/flags/) for global options
not listed here.
.SH SEE ALSO
.IP \[bu] 2
rclone config (https://rclone.org/commands/rclone_config/) - Enter an
interactive configuration session.
.SH rclone config show
.PP
Print (decrypted) config file, or the config for a single remote.
@ -14827,7 +14863,7 @@ directory \f[C]dir\f[R] and sub directories.
E.g.
on Microsoft Windows
\f[C]rclone ls remote: --exclude \[dq]*\[rs][{JP,KR,HK}\[rs]]*\[dq]\f[R]
lists the files in \f[C]remote:\f[R] with \f[C][JP]\f[R] or
lists the files in \f[C]remote:\f[R] without \f[C][JP]\f[R] or
\f[C][KR]\f[R] or \f[C][HK]\f[R] in their name.
Quotes prevent the shell from interpreting the \f[C]\[rs]\f[R]
characters.\f[C]\[rs]\f[R] characters escape the \f[C][\f[R] and
@ -20812,7 +20848,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 (default \[dq]rclone/v1.63.0\[dq])
--user-agent string Set the user-agent to a specified string (default \[dq]rclone/v1.63.1\[dq])
-v, --verbose count Print lots more stuff (repeat for more)
\f[R]
.fi
@ -38345,7 +38381,7 @@ Click \f[C]Submit\f[R]
.IP "7." 3
Switch to the \f[C]Settings\f[R] tab.
Fill \f[C]OAuth2 - Redirect URIs\f[R] as
\f[C]http://localhost:53682/\f[R]
\f[C]http://localhost:53682/\f[R] and click on \f[C]Add\f[R]
.IP "8." 3
Find the \f[C]App key\f[R] and \f[C]App secret\f[R] values on the
\f[C]Settings\f[R] tab.
@ -42452,8 +42488,7 @@ Under \[dq]ENABLE APIS AND SERVICES\[dq] search for \[dq]Drive\[dq], and
enable the \[dq]Google Drive API\[dq].
.IP " 4." 4
Click \[dq]Credentials\[dq] in the left-side panel (not \[dq]Create
credentials\[dq], which opens the wizard), then \[dq]Create
credentials\[dq]
credentials\[dq], which opens the wizard).
.IP " 5." 4
If you already configured an \[dq]Oauth Consent Screen\[dq], then skip
to the next step; if not, click on \[dq]CONFIGURE CONSENT SCREEN\[dq]
@ -46075,9 +46110,6 @@ Mail.ru Cloud (https://cloud.mail.ru/) is a cloud storage provided by a
Russian internet company Mail.Ru Group (https://mail.ru).
The official desktop client is Disk-O: (https://disk-o.cloud/en),
available on Windows and Mac OS.
.PP
Currently it is recommended to disable 2FA on Mail.ru accounts intended
for rclone until it gets eventually implemented.
.SS Features highlights
.IP \[bu] 2
Paths may be as deep as required, e.g.
@ -59481,6 +59513,60 @@ Options:
.IP \[bu] 2
\[dq]error\[dq]: return an error based on option value
.SH Changelog
.SS v1.63.1 - 2023-07-17
.PP
See commits (https://github.com/rclone/rclone/compare/v1.63.0...v1.63.1)
.IP \[bu] 2
Bug Fixes
.RS 2
.IP \[bu] 2
build: Fix macos builds for versions < 12 (Anagh Kumar Baranwal)
.IP \[bu] 2
dirtree: Fix performance with large directories of directories and
\f[C]--fast-list\f[R] (Nick Craig-Wood)
.IP \[bu] 2
operations
.RS 2
.IP \[bu] 2
Fix deadlock when using \f[C]lsd\f[R]/\f[C]ls\f[R] with
\f[C]--progress\f[R] (Nick Craig-Wood)
.IP \[bu] 2
Fix \f[C].rclonelink\f[R] files not being converted back to symlinks
(Nick Craig-Wood)
.RE
.IP \[bu] 2
doc fixes (Dean Attali, Mahad, Nick Craig-Wood, Sawada Tsunayoshi,
Vladislav Vorobev)
.RE
.IP \[bu] 2
Local
.RS 2
.IP \[bu] 2
Fix partial directory read for corrupted filesystem (Nick Craig-Wood)
.RE
.IP \[bu] 2
Box
.RS 2
.IP \[bu] 2
Fix reconnect failing with HTTP 400 Bad Request (albertony)
.RE
.IP \[bu] 2
Smb
.RS 2
.IP \[bu] 2
Fix \[dq]Statfs failed: bucket or container name is needed\[dq] when
mounting (Nick Craig-Wood)
.RE
.IP \[bu] 2
WebDAV
.RS 2
.IP \[bu] 2
Nextcloud: fix must use /dav/files/USER endpoint not /webdav error
(Paul)
.IP \[bu] 2
Nextcloud chunking: add more guidance for the user to check the config
(darix)
.RE
.SS v1.63.0 - 2023-06-30
.PP
See commits (https://github.com/rclone/rclone/compare/v1.62.0...v1.63.0)
@ -73417,6 +73503,13 @@ mac-15 <usman.ilamdin@phpstudios.com>
Forum for questions and general discussion:
.IP \[bu] 2
https://forum.rclone.org
.SS Business support
.PP
For business support or sponsorship enquiries please see:
.IP \[bu] 2
https://rclone.com/
.IP \[bu] 2
sponsorship\[at]rclone.com
.SS GitHub repository
.PP
The project\[aq]s repository is located at:
@ -73426,15 +73519,18 @@ https://github.com/rclone/rclone
There you can file bug reports or contribute with pull requests.
.SS Twitter
.PP
You can also follow me on twitter for rclone announcements:
You can also follow Nick on twitter for rclone announcements:
.IP \[bu] 2
[\[at]njcw](https://twitter.com/njcw)
.SS Email
.PP
Or if all else fails or you want to ask something private or
confidential email Nick Craig-Wood (mailto:nick@craig-wood.com).
Please don\[aq]t email me requests for help - those are better directed
to the forum.
Thanks!
confidential
.IP \[bu] 2
info\[at]rclone.com
.PP
Please don\[aq]t email requests for help to this address - those are
better directed to the forum unless you\[aq]d like to sign up for
business support.
.SH AUTHORS
Nick Craig-Wood.