Sync

API Documentation:Sync

Synchronizes the contents of a destination directory with some source directories and files.

This task is like the Copy task, except the destination directory will only contain the files copied. All files that exist in the destination directory will be deleted before copying files, unless a Sync.preserve(org.gradle.api.Action) is specified.

Examples:

// Sync can be used like a Copy task
// See the Copy documentation for more examples
task syncDependencies(type: Sync) {
    from 'my/shared/dependencyDir'
    into 'build/deps/compile'
}

// You can preserve output that already exists in the
// destination directory. Files matching the preserve
// filter will not be deleted.
task sync(type: Sync) {
    from 'source'
    into 'dest'
    preserve {
        include 'extraDir/**'
        include 'dir1/**'
        exclude 'dir1/extra.txt'
    }
}

Properties

PropertyDescription
caseSensitive

Specifies whether case-sensitive pattern matching should be used.

destinationDir

The directory to copy files into.

dirMode

The Unix permissions to use for the target directories. null means that existing permissions are preserved. It is dependent on the copy action implementation whether these permissions will actually be applied.

duplicatesStrategy

The strategy to use when trying to copy more than one file to the same destination.

excludes

The set of exclude patterns.

fileMode

The Unix permissions to use for the target files. null means that existing permissions are preserved. It is dependent on the copy action implementation whether these permissions will actually be applied.

includeEmptyDirs

Tells if empty target directories will be included in the copy.

includes

The set of include patterns.

preserve

The filter that defines which files to preserve in the destination directory.

source

The source files for this task.

Methods

MethodDescription
eachFile(closure)

Adds an action to be applied to each file as it about to be copied into its destination. The given closure is called with a FileCopyDetails as its parameter. Actions are executed in the order added, and are inherited from the parent spec.

eachFile(action)

Adds an action to be applied to each file as it is about to be copied into its destination. The action can change the destination path of the file, filter the contents of the file, or exclude the file from the result entirely. Actions are executed in the order added, and are inherited from the parent spec.

exclude(excludeSpec)

Adds an exclude spec. This method may be called multiple times to append new specs.The given closure is passed a FileTreeElement as its parameter. The closure should return true or false. Example:

exclude(excludes)

Adds an ANT style exclude pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.

exclude(excludes)

Adds an ANT style exclude pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.

exclude(excludeSpec)

Adds an exclude spec. This method may be called multiple times to append new specs. If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.

expand(properties)

Expands property references in each file as it is copied. More specifically, each file is transformed using Groovy's SimpleTemplateEngine. This means you can use simple property references, such as $property or ${property} in the file. You can also include arbitrary Groovy code in the file, such as ${version ?: 'unknown'} or ${classpath*.name.join(' ')}

filesMatching(patterns, action)

Configure the FileCopyDetails for each file whose path matches any of the specified Ant-style patterns. This is equivalent to using eachFile() and selectively applying a configuration based on the file's path.

filesMatching(pattern, action)

Configure the FileCopyDetails for each file whose path matches the specified Ant-style pattern. This is equivalent to using eachFile() and selectively applying a configuration based on the file's path.

filesNotMatching(patterns, action)

Configure the FileCopyDetails for each file whose path does not match any of the specified Ant-style patterns. This is equivalent to using eachFile() and selectively applying a configuration based on the file's path.

filesNotMatching(pattern, action)

Configure the FileCopyDetails for each file whose path does not match the specified Ant-style pattern. This is equivalent to using eachFile() and selectively applying a configuration based on the file's path.

filter(closure)

Adds a content filter based on the provided closure. The Closure will be called with each line (stripped of line endings) and should return a String to replace the line or null to remove the line. If every line is removed, the result will be an empty file, not an absent one.

filter(filterType)

Adds a content filter to be used during the copy. Multiple calls to filter, add additional filters to the filter chain. Each filter should implement java.io.FilterReader. Include org.apache.tools.ant.filters.* for access to all the standard Ant filters.

filter(properties, filterType)

Adds a content filter to be used during the copy. Multiple calls to filter, add additional filters to the filter chain. Each filter should implement java.io.FilterReader. Include org.apache.tools.ant.filters.* for access to all the standard Ant filters.

filter(transformer)

Adds a content filter based on the provided transformer. The Closure will be called with each line (stripped of line endings) and should return a String to replace the line or null to remove the line. If every line is removed, the result will be an empty file, not an absent one.

from(sourcePath, c)

Specifies the source files or directories for a copy and creates a child CopySourceSpec. The given source path is evaluated as per Project.files(java.lang.Object[]) .

from(sourcePath, configureAction)

Specifies the source files or directories for a copy and creates a child CopySpec. The given source path is evaluated as per Project.files(java.lang.Object[]) .

from(sourcePaths)

Specifies source files or directories for a copy. The given paths are evaluated as per Project.files(java.lang.Object[]).

include(includeSpec)

Adds an include spec. This method may be called multiple times to append new specs. The given closure is passed a FileTreeElement as its parameter. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns or specs to be included.

include(includes)

Adds an ANT style include pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns to be processed.

include(includes)

Adds an ANT style include pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns to be processed.

include(includeSpec)

Adds an include spec. This method may be called multiple times to append new specs. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns or specs to be included.

into(destDir)

Specifies the destination directory for a copy. The destination is evaluated as per Project.file(java.lang.Object).

into(destPath, configureClosure)

Creates and configures a child CopySpec with the given destination path. The destination is evaluated as per Project.file(java.lang.Object).

into(destPath, copySpec)

Creates and configures a child CopySpec with the given destination path. The destination is evaluated as per Project.file(java.lang.Object).

preserve(action)

Configures the filter that defines which files to preserve in the destination directory.

rename(closure)

Renames a source file. The closure will be called with a single parameter, the name of the file. The closure should return a String object with a new target name. The closure may return null, in which case the original name will be used.

rename(sourceRegEx, replaceWith)

Renames files based on a regular expression. Uses java.util.regex type of regular expressions. Note that the replace string should use the '$1' syntax to refer to capture groups in the source regular expression. Files that do not match the source regular expression will be copied with the original name.

rename(sourceRegEx, replaceWith)

Renames files based on a regular expression. See CopyProcessingSpec.rename(java.lang.String, java.lang.String).

rename(renamer)

Renames a source file. The function will be called with a single parameter, the name of the file. The function should return a new target name. The function may return null, in which case the original name will be used.

with(sourceSpecs)

Adds the given specs as a child of this spec.

Script blocks

No script blocks

Property details

boolean caseSensitive

Specifies whether case-sensitive pattern matching should be used.

Default:
true

File destinationDir

The directory to copy files into.

Default:
null

Integer dirMode

The Unix permissions to use for the target directories. null means that existing permissions are preserved. It is dependent on the copy action implementation whether these permissions will actually be applied.

Default:
null

DuplicatesStrategy duplicatesStrategy

The strategy to use when trying to copy more than one file to the same destination.

The value can be set with a case insensitive string of the enum value (e.g. 'exclude' for DuplicatesStrategy.EXCLUDE).

This strategy can be overridden for individual files by using CopySpec.eachFile(org.gradle.api.Action) or CopySpec.filesMatching(java.lang.String, org.gradle.api.Action).

Default:
null

Set<String> excludes

The set of exclude patterns.

Default:
[]

Integer fileMode

The Unix permissions to use for the target files. null means that existing permissions are preserved. It is dependent on the copy action implementation whether these permissions will actually be applied.

Default:
null

boolean includeEmptyDirs

Tells if empty target directories will be included in the copy.

Default:
true

Set<String> includes

The set of include patterns.

Default:
[]

PatternFilterable preserve (read-only)

The filter that defines which files to preserve in the destination directory.

Default:
empty

FileCollection source (read-only)

The source files for this task.

Default:
[]

Method details

AbstractCopyTask eachFile(Closure closure)

Adds an action to be applied to each file as it about to be copied into its destination. The given closure is called with a FileCopyDetails as its parameter. Actions are executed in the order added, and are inherited from the parent spec.

AbstractCopyTask eachFile(Action<? super FileCopyDetails> action)

Adds an action to be applied to each file as it is about to be copied into its destination. The action can change the destination path of the file, filter the contents of the file, or exclude the file from the result entirely. Actions are executed in the order added, and are inherited from the parent spec.

AbstractCopyTask exclude(Closure excludeSpec)

Adds an exclude spec. This method may be called multiple times to append new specs.The given closure is passed a FileTreeElement as its parameter. The closure should return true or false. Example:

copySpec {
  from 'source'
  into 'destination'
  //an example of excluding files from certain configuration:
  exclude { it.file in configurations.someConf.files }
}

If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.

AbstractCopyTask exclude(Iterable<String> excludes)

Adds an ANT style exclude pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.

AbstractCopyTask exclude(String... excludes)

Adds an ANT style exclude pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.

AbstractCopyTask exclude(Spec<FileTreeElement> excludeSpec)

Adds an exclude spec. This method may be called multiple times to append new specs. If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.

AbstractCopyTask expand(Map<String, ?> properties)

Expands property references in each file as it is copied. More specifically, each file is transformed using Groovy's SimpleTemplateEngine. This means you can use simple property references, such as $property or ${property} in the file. You can also include arbitrary Groovy code in the file, such as ${version ?: 'unknown'} or ${classpath*.name.join(' ')}

AbstractCopyTask filesMatching(Iterable<String> patterns, Action<? super FileCopyDetails> action)

Configure the FileCopyDetails for each file whose path matches any of the specified Ant-style patterns. This is equivalent to using eachFile() and selectively applying a configuration based on the file's path.

AbstractCopyTask filesMatching(String pattern, Action<? super FileCopyDetails> action)

Configure the FileCopyDetails for each file whose path matches the specified Ant-style pattern. This is equivalent to using eachFile() and selectively applying a configuration based on the file's path.

AbstractCopyTask filesNotMatching(Iterable<String> patterns, Action<? super FileCopyDetails> action)

Configure the FileCopyDetails for each file whose path does not match any of the specified Ant-style patterns. This is equivalent to using eachFile() and selectively applying a configuration based on the file's path.

AbstractCopyTask filesNotMatching(String pattern, Action<? super FileCopyDetails> action)

Configure the FileCopyDetails for each file whose path does not match the specified Ant-style pattern. This is equivalent to using eachFile() and selectively applying a configuration based on the file's path.

AbstractCopyTask filter(Closure closure)

Adds a content filter based on the provided closure. The Closure will be called with each line (stripped of line endings) and should return a String to replace the line or null to remove the line. If every line is removed, the result will be an empty file, not an absent one.

AbstractCopyTask filter(Class<? extends FilterReader> filterType)

Adds a content filter to be used during the copy. Multiple calls to filter, add additional filters to the filter chain. Each filter should implement java.io.FilterReader. Include org.apache.tools.ant.filters.* for access to all the standard Ant filters.

Examples:

filter(StripJavaComments)
filter(com.mycompany.project.CustomFilter)

AbstractCopyTask filter(Map<String, ?> properties, Class<? extends FilterReader> filterType)

Adds a content filter to be used during the copy. Multiple calls to filter, add additional filters to the filter chain. Each filter should implement java.io.FilterReader. Include org.apache.tools.ant.filters.* for access to all the standard Ant filters.

Filter properties may be specified using groovy map syntax.

Examples:

filter(HeadFilter, lines:25, skip:2)
filter(ReplaceTokens, tokens:[copyright:'2009', version:'2.3.1'])

Adds a content filter based on the provided transformer. The Closure will be called with each line (stripped of line endings) and should return a String to replace the line or null to remove the line. If every line is removed, the result will be an empty file, not an absent one.

AbstractCopyTask from(Object sourcePath, Closure c)

Specifies the source files or directories for a copy and creates a child CopySourceSpec. The given source path is evaluated as per Project.files(java.lang.Object[]) .

AbstractCopyTask from(Object sourcePath, Action<? super CopySpec> configureAction)

Specifies the source files or directories for a copy and creates a child CopySpec. The given source path is evaluated as per Project.files(java.lang.Object[]) .

AbstractCopyTask from(Object... sourcePaths)

Specifies source files or directories for a copy. The given paths are evaluated as per Project.files(java.lang.Object[]).

AbstractCopyTask include(Closure includeSpec)

Adds an include spec. This method may be called multiple times to append new specs. The given closure is passed a FileTreeElement as its parameter. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns or specs to be included.

AbstractCopyTask include(Iterable<String> includes)

Adds an ANT style include pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns to be processed.

AbstractCopyTask include(String... includes)

Adds an ANT style include pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns to be processed.

AbstractCopyTask include(Spec<FileTreeElement> includeSpec)

Adds an include spec. This method may be called multiple times to append new specs. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns or specs to be included.

AbstractCopyTask into(Object destDir)

Specifies the destination directory for a copy. The destination is evaluated as per Project.file(java.lang.Object).

AbstractCopyTask into(Object destPath, Closure configureClosure)

Creates and configures a child CopySpec with the given destination path. The destination is evaluated as per Project.file(java.lang.Object).

CopySpec into(Object destPath, Action<? super CopySpec> copySpec)

Creates and configures a child CopySpec with the given destination path. The destination is evaluated as per Project.file(java.lang.Object).

Sync preserve(Action<? super PatternFilterable> action)

Configures the filter that defines which files to preserve in the destination directory.

AbstractCopyTask rename(Closure closure)

Renames a source file. The closure will be called with a single parameter, the name of the file. The closure should return a String object with a new target name. The closure may return null, in which case the original name will be used.

AbstractCopyTask rename(String sourceRegEx, String replaceWith)

Renames files based on a regular expression. Uses java.util.regex type of regular expressions. Note that the replace string should use the '$1' syntax to refer to capture groups in the source regular expression. Files that do not match the source regular expression will be copied with the original name.

Example:

rename '(.*)_OEM_BLUE_(.*)', '$1$2'

would map the file 'style_OEM_BLUE_.css' to 'style.css'

AbstractCopyTask rename(Pattern sourceRegEx, String replaceWith)

Renames files based on a regular expression. See CopyProcessingSpec.rename(java.lang.String, java.lang.String).

Renames a source file. The function will be called with a single parameter, the name of the file. The function should return a new target name. The function may return null, in which case the original name will be used.

CopySpec with(CopySpec... sourceSpecs)

Adds the given specs as a child of this spec.

def contentSpec = copySpec {
  from("content") {
    include "**/*.txt"
  }
}

task copy(type: Copy) {
  into "$buildDir/copy"
  with contentSpec
}