---
schema_version: "1"
id: ef0134d612cb2f015288826dfb3be09994e6c7cdc120b43a4f6cc1d4a404a3ce
title: List Files Using the SFTP Connector
collection: mulesoft
version: current
locale: en-us
portal_url: https://docs.salesforce.com/mulesoft/current/en-us/sftp-connector/2.5/sftp-list.md
canonical_url: https://docs.mulesoft.com/sftp-connector/2.5/sftp-list
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 8db756902678900baf5f743edd1395bb8593ca67c7f233454510d5e1f9c0d57b
description: MuleSoft Documentation Site
release: "2.5"
latest: false
---
---
product: SFTP Connector
version: 2.5
---

# List Files Using the SFTP Connector

> For the full documentation index, see: https://docs.mulesoft.com/llms.txt

Anypoint Connector for SFTP (SFTP Connector) provides a **List** operation that returns a list of
messages representing files or folders in the directory path:

- The path you define in the **Directory path** field can be absolute, or it can be relative to a
  working directory.

- By default, the operation does not read or list files or folders within any subfolders of the
  directory path.

- To list files or folders within any subfolders, set the **Recursive** field to **TRUE**.

## Configure the List Operation in Studio

To add and configure the **List** operation in Studio, follow these steps:

1.  In the **Mule Palette** view, search for `sftp` and select the **List** operation.

2.  Drag the **List** operation onto the Studio canvas.

3.  In the **General** tab of the operation configuration screen, click the plus sign (**+**) next
    to the **Connector configuration** field to access the global element configuration fields.

4.  Specify the connection information and click **OK**.

5.  In the **General** tab, set the **Directory path** field to `~/dropFolder` to set the path of
    the file to list.

![List operation configuration in Studio](/mulesoft/current/en-us/sftp-connector/2.5/_images/sftp-list-operation-1.png)

In the **Configuration XML** editor, the `<sftp:list>` configuration looks like this:

```xml
<sftp:list doc:name="List" config-ref="SFTP_Config" directoryPath="~/dropFolder"/>
```

## Examples

### Basic use case

The following XML example lists the folder contents of messages in the directory path without the
subfolder contents. The **For Each** and **Choice** components manage each directory in the list
differently from the way they manage each file:

```xml
<flow name="list">
  <sftp:list config-ref="SFTP_Config" directoryPath="~/dropFolder" />
  <foreach>
    <choice>
      <when expression="#[attributes.directory]">
        <flow-ref name="processDirectory" />
      </when>
      <otherwise>
        <logger message="Found file #[attributes.path]" />
		<sftp:read config-ref="SFTP_Config" path="#[payload]" />
		<logger message="Whose content is #[payload]" />
      </otherwise>
    </choice>
  </foreach>
</flow>
```

### Poll a Directory

You can combine a **Scheduler** source with the SFTP **List** operation to poll a directory to look
for new files to process.

> [!NOTE] For automatic polling, use the SFTP [On New or Updated File](https://docs.mulesoft.com/sftp-connector/2.5/sftp-on-new-file) operation
> which enables you to optionally set post-processing options to automatically move or delete files.

In the following poll directory example, a flow lists the contents of a folder once per second. The
flow then processes the files one by one, deleting each file after it is processed because there is
a **Delete** operation in the **For Each** component.

The following screenshot shows the flow in Studio:

![Pool a directory flow in Studio](/mulesoft/current/en-us/sftp-connector/2.5/_images/sftp-list-operation-2.png)

To create the flow, follow these steps:

1.  In Studio, drag the **Scheduler** component onto the Studio canvas.

2.  Drag the SFTP **List** operation to the right of **Scheduler**.

3.  In the **General** tab of the operation configuration screen, click the plus sign (**+**) next
    to the **Connector configuration** field to access the global element configuration fields.

4.  Specify the connection information and click **OK**.

5.  In the **General** tab, set the **Directory path** field to `/config/dropFolder` to set the path
    of the file to list.

6.  Drag a **For each** component to the right of the **List** operation.

7.  Drag a **Flow Reference** component inside the **For each** component.

8.  Set the **Flow name** field to `processFile` to specify the flow reference that process the
    files.

9.  Drag an SFTP **Delete** operation to the right of the **Flow Reference** component.

10. Set the **Connector configuration** field to the previously configured connection in the
    **List** operation.

11. Set the **Path** field to `#[payload]`.

12. Drag a **Transform Message** component below the first flow.

13. Select the new flow and change the **Name** field to `processFile`.

14. Drag an SFTP **Read** operation to the left of the **Transform Message** component and set the
    **Path** field to `#[payload]`.

15. Select the **Transform Message** component in the new flow, and in the **Output** view, paste
    the following DataWeave expression:

    ```dataWeave
    %dw 2.0
    						output application/json
    						---
    						characters: payload.characters.*name map (
    						            (item, index) -> {name: item}
    						         )
    ```

16. Drag a **Logger** component to the right of **Transform Message**.

17. Set the **Message** field to `payload`.

18. Drag an Objet Store **Store** operation to the right of **Logger**.

19. Set the **Key** field to `test-file-' random() as String '.json'`, and **Value** to `payload`.

20. Save your Mule application.

In the **Configuration XML** editor, the configuration looks like this:

```xml
?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:os="http://www.mulesoft.org/schema/mule/os"
    xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
	xmlns:ftps="http://www.mulesoft.org/schema/mule/ftps"
	xmlns:sftp="http://www.mulesoft.org/schema/mule/sftp"
	xmlns="http://www.mulesoft.org/schema/mule/core"
	xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/sftp http://www.mulesoft.org/schema/mule/sftp/current/mule-sftp.xsd
http://www.mulesoft.org/schema/mule/ftps http://www.mulesoft.org/schema/mule/ftps/current/mule-ftps.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/os http://www.mulesoft.org/schema/mule/os/current/mule-os.xsd">

	<sftp:config name="SFTP_Config" doc:name="SFTP Config" >
		<sftp:connection host="localhost" port="2222" username="bob" password="pass"/>
	</sftp:config>

	<os:object-store name="Object_store" doc:name="Object store" />

	<flow name="poll">
	  <scheduler>
	      <scheduling-strategy>
	          <fixed-frequency frequency="1000"/>
	      </scheduling-strategy>
	  </scheduler>

	  <sftp:list directoryPath="/config/dropFolder" config-ref="SFTP_Config"/>

	  <foreach>
	      <flow-ref name="processFile" />
	      <sftp:delete path="#[payload]" config-ref="SFTP_Config"/>
	  </foreach>
	</flow>

	  <flow name="processFile" maxConcurrency="1">
	  		<sftp:read config-ref="SFTP_Config" path="#[payload]" />
			<ee:transform doc:name="Transform Message" >
				<ee:message >
					<ee:set-payload ><![CDATA[%dw 2.0
						output application/json
						---
						characters: payload.characters.*name map (
						            (item, index) -> {name: item}
						         )]]></ee:set-payload>
				</ee:message>
			</ee:transform>

			<logger level="ERROR" message="#[payload]" />
			<os:store doc:name="Store" objectStore="Object_store" key="#['test-file-' ++ random() as String ++ '.json']"/>
	  </flow>

</mule>
```

## Match Filter

When listing files, use the **File Matching Rules** field, which accepts files that match the
specified criteria. This field defines the possible attributes to either accept or reject a file.
These attributes are optional and ignored if you do not provide values for them. Use an `AND`
operator to combine individual attributes.

To configure the field in Studio, set the **File Matching Rules** field to **Edit inline** and
complete the desired attributes:

- **Timestamp since**  
  Files created before this date are rejected. Any timezone specification in this value is ignored
  and the Mule server’s time zone is used instead.

- **Timestamp until**  
  Files created after this date are rejected. Any timezone specification in this value is ignored
  and the Mule server’s time zone is used instead.

- **Not updated in the last**  
  Minimum time that should pass since a file was last updated to not be rejected. This attribute
  works in tandem with **Time unit**.

- **Updated in the last**  
  Maximum time that should pass from when a file was last updated to not be rejected. This attribute
  works in tandem with **Time unit**.

- **Time unit**  
  A **Not updated in the last** attributes. Defaults to `MILLISECONDS`.

- **Filename pattern**  
  Similar to the current filename pattern filter but more powerful. Glob expressions (default) and
  regex are supported. You can select which one to use by setting a prefix, for example,
  `glob:*.{java, js}` or `regex:[0-9]test.csv`.

- **Path pattern**  
  Same as **Filename pattern** but applies over the entire file path rather than just a filename.

- **Directories**  
  Match only if the file is a directory.

- **Regular files**  
  Match only if the file is a regular file.

- **Sym links**\`  
  Match only if the file is a symbolic link.

- **Min size**  
  Inclusive lower boundary for the file size, expressed in bytes.

- **Max size**  
  Inclusive upper boundary for the file size, expressed in bytes.

![File Matching Rules field configuration](/mulesoft/current/en-us/sftp-connector/2.5/_images/sftp-list-operation-3.png)

In the **Configuration XML** editor, the configuration looks like this:

```xml
<sftp:matcher
  timestampSince="2019-06-03T13:21:58+00:00"
  timestampUntil="2019-06-03T13:21:58+00:00"
  timeUnit="MICROSECONDS"
  filenamePattern="a?*.{htm,html,pdf}"
  pathPattern="a?*.{htm,html,pdf}"
  directories="REQUIRE"
  regularFiles="REQUIRE"
  symLinks="REQUIRE"
  maxSize="1024"/>
```

### External File System Matcher

SFTP Connector enables you to use an external file system matcher. Configure the matcher as case
sensitive or insensitive in the **Case sensitive** field.

![Case sensitive field set to TRUE](/mulesoft/current/en-us/sftp-connector/2.5/_images/sftp-list-operation-4.png)

In the **Configuration XML** editor, the `caseSensitive` configuration looks like this:

```xml
<sftp:list doc:name="List" config-ref="SFTP_Config" directoryPath="/upload">
	    <sftp:matcher filenamePattern="*.txt" caseSensitive="true"/>
	</sftp:list>
```

### Top-Level, Reusable Matcher

You can use the file matcher as either a named top-level element that enables reuse or as an inner
element that is proprietary to a particular component.

The following example shows a top-level reusable matcher:

```xml
<sftp:matcher name="smallFileMatcher" maxSize="100" />
      <flow name="smallFiles">
      <sftp:list path="~/smallfiles" matcher="smallFileMatcher" />
      ...
</flow>
```

### Inner Nonreusable Matcher

The following example shows an inner nonreusable matcher:

```xml
<flow name="smallFiles">
      <sftp:list path="~/smallfiles" matcher="smallFileMatcher">
            <sftp:matcher maxSize="100" />
      </sftp:list>
      ...
</flow>
```

## See Also

- [SFTP Connector Examples](https://docs.mulesoft.com/sftp-connector/2.5/sftp-examples)

- [Salesforce Help](https://help.salesforce.com)
