mirror of
https://github.com/rclone/rclone.git
synced 2025-12-06 00:03:32 +00:00
257 lines
13 KiB
Markdown
257 lines
13 KiB
Markdown
---
|
|
title: "rclone copy"
|
|
description: "Copy files from source to dest, skipping identical files."
|
|
# autogenerated - DO NOT EDIT, instead edit the source code in cmd/copy/ and as part of making a release run "make commanddocs"
|
|
---
|
|
# rclone copy
|
|
|
|
Copy files from source to dest, skipping identical files.
|
|
|
|
## Synopsis
|
|
|
|
Copy the source to the destination. Does not transfer files that are
|
|
identical on source and destination, testing by size and modification
|
|
time or MD5SUM. Doesn't delete files from the destination. If you
|
|
want to also delete files from destination, to make it match source,
|
|
use the [sync](/commands/rclone_sync/) command instead.
|
|
|
|
Note that it is always the contents of the directory that is synced,
|
|
not the directory itself. So when source:path is a directory, it's the
|
|
contents of source:path that are copied, not the directory name and
|
|
contents.
|
|
|
|
To copy single files, use the [copyto](/commands/rclone_copyto/)
|
|
command instead.
|
|
|
|
If dest:path doesn't exist, it is created and the source:path contents
|
|
go there.
|
|
|
|
For example
|
|
|
|
```sh
|
|
rclone copy source:sourcepath dest:destpath
|
|
```
|
|
|
|
Let's say there are two files in sourcepath
|
|
|
|
```text
|
|
sourcepath/one.txt
|
|
sourcepath/two.txt
|
|
```
|
|
|
|
This copies them to
|
|
|
|
```text
|
|
destpath/one.txt
|
|
destpath/two.txt
|
|
```
|
|
|
|
Not to
|
|
|
|
```text
|
|
destpath/sourcepath/one.txt
|
|
destpath/sourcepath/two.txt
|
|
```
|
|
|
|
If you are familiar with `rsync`, rclone always works as if you had
|
|
written a trailing `/` - meaning "copy the contents of this directory".
|
|
This applies to all commands and whether you are talking about the
|
|
source or destination.
|
|
|
|
See the [--no-traverse](/docs/#no-traverse) option for controlling
|
|
whether rclone lists the destination directory or not. Supplying this
|
|
option when copying a small number of files into a large destination
|
|
can speed transfers up greatly.
|
|
|
|
For example, if you have many files in /path/to/src but only a few of
|
|
them change every day, you can copy all the files which have changed
|
|
recently very efficiently like this:
|
|
|
|
```sh
|
|
rclone copy --max-age 24h --no-traverse /path/to/src remote:
|
|
```
|
|
|
|
Rclone will sync the modification times of files and directories if
|
|
the backend supports it. If metadata syncing is required then use the
|
|
`--metadata` flag.
|
|
|
|
Note that the modification time and metadata for the root directory
|
|
will **not** be synced. See [issue #7652](https://github.com/rclone/rclone/issues/7652)
|
|
for more info.
|
|
|
|
**Note**: Use the `-P`/`--progress` flag to view real-time transfer statistics.
|
|
|
|
**Note**: Use the `--dry-run` or the `--interactive`/`-i` flag to test without
|
|
copying anything.
|
|
|
|
## Logger Flags
|
|
|
|
The `--differ`, `--missing-on-dst`, `--missing-on-src`, `--match` and `--error`
|
|
flags write paths, one per line, to the file name (or stdout if it is `-`)
|
|
supplied. What they write is described in the help below. For example
|
|
`--differ` will write all paths which are present on both the source and
|
|
destination but different.
|
|
|
|
The `--combined` flag will write a file (or stdout) which contains all
|
|
file paths with a symbol and then a space and then the path to tell
|
|
you what happened to it. These are reminiscent of diff files.
|
|
|
|
- `= path` means path was found in source and destination and was identical
|
|
- `- path` means path was missing on the source, so only in the destination
|
|
- `+ path` means path was missing on the destination, so only in the source
|
|
- `* path` means path was present in source and destination but different.
|
|
- `! path` means there was an error reading or hashing the source or dest.
|
|
|
|
The `--dest-after` flag writes a list file using the same format flags
|
|
as [`lsf`](/commands/rclone_lsf/#synopsis) (including [customizable options
|
|
for hash, modtime, etc.](/commands/rclone_lsf/#synopsis))
|
|
Conceptually it is similar to rsync's `--itemize-changes`, but not identical
|
|
-- it should output an accurate list of what will be on the destination
|
|
after the command is finished.
|
|
|
|
When the `--no-traverse` flag is set, all logs involving files that exist only
|
|
on the destination will be incomplete or completely missing.
|
|
|
|
Note that these logger flags have a few limitations, and certain scenarios
|
|
are not currently supported:
|
|
|
|
- `--max-duration` / `CutoffModeHard`
|
|
- `--compare-dest` / `--copy-dest`
|
|
- server-side moves of an entire dir at once
|
|
- High-level retries, because there would be duplicates (use `--retries 1` to disable)
|
|
- Possibly some unusual error scenarios
|
|
|
|
Note also that each file is logged during execution, as opposed to after, so it
|
|
is most useful as a predictor of what SHOULD happen to each file
|
|
(which may or may not match what actually DID).
|
|
|
|
```
|
|
rclone copy source:path dest:path [flags]
|
|
```
|
|
|
|
## Options
|
|
|
|
```
|
|
--absolute Put a leading / in front of path names
|
|
--combined string Make a combined report of changes to this file
|
|
--create-empty-src-dirs Create empty source dirs on destination after copy
|
|
--csv Output in CSV format
|
|
--dest-after string Report all files that exist on the dest post-sync
|
|
--differ string Report all non-matching files to this file
|
|
-d, --dir-slash Append a slash to directory names (default true)
|
|
--dirs-only Only list directories
|
|
--error string Report all files with errors (hashing or reading) to this file
|
|
--files-only Only list files (default true)
|
|
-F, --format string Output format - see lsf help for details (default "p")
|
|
--hash h Use this hash when h is used in the format MD5|SHA-1|DropboxHash (default "md5")
|
|
-h, --help help for copy
|
|
--match string Report all matching files to this file
|
|
--missing-on-dst string Report all files missing from the destination to this file
|
|
--missing-on-src string Report all files missing from the source to this file
|
|
-s, --separator string Separator for the items in the format (default ";")
|
|
-t, --timeformat string Specify a custom time format - see docs for details (default: 2006-01-02 15:04:05)
|
|
```
|
|
|
|
Options shared with other commands are described next.
|
|
See the [global flags page](/flags/) for global options not listed here.
|
|
|
|
### Copy Options
|
|
|
|
Flags for anything which can copy a file
|
|
|
|
```text
|
|
--check-first Do all the checks before starting transfers
|
|
-c, --checksum Check for changes with size & checksum (if available, or fallback to size only)
|
|
--compare-dest stringArray Include additional server-side paths during comparison
|
|
--copy-dest stringArray Implies --compare-dest but also copies files from paths into destination
|
|
--cutoff-mode HARD|SOFT|CAUTIOUS Mode to stop transfers when reaching the max transfer limit HARD|SOFT|CAUTIOUS (default HARD)
|
|
--ignore-case-sync Ignore case when synchronizing
|
|
--ignore-checksum Skip post copy check of checksums
|
|
--ignore-existing Skip all files that exist on destination
|
|
--ignore-size Ignore size when skipping use modtime or checksum
|
|
-I, --ignore-times Don't skip items that match size and time - transfer all unconditionally
|
|
--immutable Do not modify files, fail if existing files have been modified
|
|
--inplace Download directly to destination file instead of atomic download to temp/rename
|
|
-l, --links Translate symlinks to/from regular files with a '.rclonelink' extension
|
|
--max-backlog int Maximum number of objects in sync or check backlog (default 10000)
|
|
--max-duration Duration Maximum duration rclone will transfer data for (default 0s)
|
|
--max-transfer SizeSuffix Maximum size of data to transfer (default off)
|
|
-M, --metadata If set, preserve metadata when copying objects
|
|
--modify-window Duration Max time diff to be considered the same (default 1ns)
|
|
--multi-thread-chunk-size SizeSuffix Chunk size for multi-thread downloads / uploads, if not set by filesystem (default 64Mi)
|
|
--multi-thread-cutoff SizeSuffix Use multi-thread downloads for files above this size (default 256Mi)
|
|
--multi-thread-streams int Number of streams to use for multi-thread downloads (default 4)
|
|
--multi-thread-write-buffer-size SizeSuffix In memory buffer size for writing when in multi-thread mode (default 128Ki)
|
|
--name-transform stringArray Transform paths during the copy process
|
|
--no-check-dest Don't check the destination, copy regardless
|
|
--no-traverse Don't traverse destination file system on copy
|
|
--no-update-dir-modtime Don't update directory modification times
|
|
--no-update-modtime Don't update destination modtime if files identical
|
|
--order-by string Instructions on how to order the transfers, e.g. 'size,descending'
|
|
--partial-suffix string Add partial-suffix to temporary file name when --inplace is not used (default ".partial")
|
|
--refresh-times Refresh the modtime of remote files
|
|
--server-side-across-configs Allow server-side operations (e.g. copy) to work across different configs
|
|
--size-only Skip based on size only, not modtime or checksum
|
|
--streaming-upload-cutoff SizeSuffix Cutoff for switching to chunked upload if file size is unknown, upload starts after reaching cutoff or when file ends (default 100Ki)
|
|
-u, --update Skip files that are newer on the destination
|
|
```
|
|
|
|
### Important Options
|
|
|
|
Important flags useful for most commands
|
|
|
|
```text
|
|
-n, --dry-run Do a trial run with no permanent changes
|
|
-i, --interactive Enable interactive mode
|
|
-v, --verbose count Print lots more stuff (repeat for more)
|
|
```
|
|
|
|
### Filter Options
|
|
|
|
Flags for filtering directory listings
|
|
|
|
```text
|
|
--delete-excluded Delete files on dest excluded from sync
|
|
--exclude stringArray Exclude files matching pattern
|
|
--exclude-from stringArray Read file exclude patterns from file (use - to read from stdin)
|
|
--exclude-if-present stringArray Exclude directories if filename is present
|
|
--files-from stringArray Read list of source-file names from file (use - to read from stdin)
|
|
--files-from-raw stringArray Read list of source-file names from file without any processing of lines (use - to read from stdin)
|
|
-f, --filter stringArray Add a file filtering rule
|
|
--filter-from stringArray Read file filtering patterns from a file (use - to read from stdin)
|
|
--hash-filter string Partition filenames by hash k/n or randomly @/n
|
|
--ignore-case Ignore case in filters (case insensitive)
|
|
--include stringArray Include files matching pattern
|
|
--include-from stringArray Read file include patterns from file (use - to read from stdin)
|
|
--max-age Duration Only transfer files younger than this in s or suffix ms|s|m|h|d|w|M|y (default off)
|
|
--max-depth int If set limits the recursion depth to this (default -1)
|
|
--max-size SizeSuffix Only transfer files smaller than this in KiB or suffix B|K|M|G|T|P (default off)
|
|
--metadata-exclude stringArray Exclude metadatas matching pattern
|
|
--metadata-exclude-from stringArray Read metadata exclude patterns from file (use - to read from stdin)
|
|
--metadata-filter stringArray Add a metadata filtering rule
|
|
--metadata-filter-from stringArray Read metadata filtering patterns from a file (use - to read from stdin)
|
|
--metadata-include stringArray Include metadatas matching pattern
|
|
--metadata-include-from stringArray Read metadata include patterns from file (use - to read from stdin)
|
|
--min-age Duration Only transfer files older than this in s or suffix ms|s|m|h|d|w|M|y (default off)
|
|
--min-size SizeSuffix Only transfer files bigger than this in KiB or suffix B|K|M|G|T|P (default off)
|
|
```
|
|
|
|
### Listing Options
|
|
|
|
Flags for listing directories
|
|
|
|
```text
|
|
--default-time Time Time to show if modtime is unknown for files and directories (default 2000-01-01T00:00:00Z)
|
|
--fast-list Use recursive list if available; uses more memory but fewer transactions
|
|
```
|
|
|
|
## See Also
|
|
|
|
<!-- markdownlint-capture -->
|
|
<!-- markdownlint-disable ul-style line-length -->
|
|
|
|
* [rclone](/commands/rclone/) - Show help for rclone commands, flags and backends.
|
|
|
|
|
|
<!-- markdownlint-restore -->
|