////
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at
  http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
////
:documentationPath: /plugins/actions/
:language: en_US
:page-alternativeEditUrl: https://github.com/apache/incubator-hop/edit/master/plugins/actions/copyfiles/src/main/doc/copyfiles.adoc
= Copy Files

== Description

This workflow action copies one of more files or folders.

== Options

[width="90%", options="header"]
|===
|Option|Description
|Workflow Action Name|Indicates the name of the action.
|Source Environment a|Indicates the file system or specific cluster on which the item you want to input can be found.  Options are Local and <Static>.

* Local: Specifies that the item specified in the File/Folder field is in a file system that is local to Hop.
* <Static>: Specifies that the item specified in the File/Folder field should use the path name in that field, exactly.  Use this if you already know a file path and you simply want to copy and paste it into the window.

|Source File/Folder* *|The file or directory to copy from.  If you choose an option other than <Static> in the Source Environment field, click the button in the field to view the Open File window.
|Wildcard|Defines the files that are copied in regular expression terms (instead of static file names), for instance: .*\.txt would be any file with a .txt extension.
|Destination Environment a|Indicates the file system or specific cluster where you want the file to be placed.  Options are Local and <Static>.

* Local: Specifies that the item specified in the File/Folder field is in a file system that is local to Hop.
* <Static>: Specifies that the item specified in the File/Folder field should use the path name in that field, exactly.  Use this if you already know a file path and you simply want to copy and paste it into the window.
|Destination File|Indicates the name of the destination environment. If you choose an option other than <Static> in the Destination Environment field, click the button in the field to view the Open File window. 
|===

== Settings

|===
|Option|Description
|Include Subfolders|If selected, all subdirectories within the chosen directory will be copied as well
|Destination is a file|Determines whether the destination is a file or a directory
|Copy empty folders|If selected, will copy all directories, even if they are empty the Include Subfolders option must be selected for this option to be valid. (Wildcard MUST be blank for this to work)
|Create destination folder|If selected, will create the specified destination directory if it does not currently exist
|Replace existing files|If selected, duplicate files in the destination directory will be overwritten
|Remove source files|If selected, removes the source files after copy (a move procedure)
|Copy previous results to arguments|Copies the previous results to arguments.
|Add files to result files name|Any files that are copied will appear as a result from this action; shows a list of files that were copied in this action
|===

== Open File

|===
|Option|Description
|Open from Folder|Indicates the path and name of the directory you want to browse.  This directory becomes the active directory.
|Up One Level|Displays the parent directory of the active directory shown in the Open from Folder field.
|Delete|Deletes a folder from the active directory.
|Create Folder|Creates a new folder in the active directory.
|Name|Displays the active directory, which is the one that is listed in the Open from Folder field.
|Filter|Applies a filter to the results displayed in the active directory contents. 
|===