////
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/evalfilesmetrics/src/main/doc/evalfilesmetrics.adoc
= Evaluate File Metrics

== Description

The Evaluate File Metrics action can be used to evaluate the size or count of files.

== Options

=== General

[width="90%", options="header"]
|===
|Option|Description
|Workflow action name|The name of the workflow action. *Note*: This name has to be unique in a single workflow. A workflow action can be placed several times on the canvas, however it will be the same workflow action.
|Source files a|The source type.

* Files/Folders
* Filenames result
* Previous result row

|Wildcard|A regex wildcard.
|File Result field|
|Wildcard result field|
|Include subfolders result field|
|Evaluate a|Type of evaluation

* Total files size
* Total file count

|File/Folder source|The file or folder path.
|Wildcard|A regex wildcard.
|Add|Add the source to the Files/Folders list.
|File...|Browse the filesystem for a file.
|Folder...|Browse the filesystem for a folder.
|Files/Folders|A list of files and/or folders.
|Delete|Delete a source from the list.
|Edit|Edit a source.
|===

=== Advanced

[width="90%", options="header"]
|===
|Option|Description
|Scale a|
* Bytes
* KBytes
* MBytes
* GBytes

|Success when a|
* If value is equal to
* If value is equal to
* If value is small than
* If value is smaller or equal
* If value is greater than
* If value is greater or equal
* If value is between
* If value in list
* If value not in list

|Value|The value to compare.
|===