

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 SFTP 连接器
<a name="transfer-sftp-connectors"></a>

本主题介绍如何使用 SFTP 连接器执行支持的文件操作。您还可以在 AWS Transfer Family 控制台上选择连接器的详细信息，找到用于执行这些操作的示例命令[https://console.aws.amazon.com/transfer/](https://console.aws.amazon.com/transfer/)。

创建 SFTP 连接器后，您可以使用它在与之关联的远程 SFTP 服务器上执行以下文件操作。
+ 将文件从 Amazon S3 发送到远程 SFTP 服务器。
+ 将文件从远程 SFTP 服务器检索到 Amazon S3。
+ 列出远程 SFTP 服务器上某个目录中的文件和子文件夹。
+ 删除、重命名或移动远程 SFTP 服务器上的文件和目录。

有关创建连接器的详细信息，请参阅 [创建 SFTP 连接器](configure-sftp-connector.md)。

**Topics**
+ [传输文件](transfer-files-and-track.md)
+ [列出远程目录的内容](sftp-connector-list-dir.md)
+ [移动、重命名或删除远程服务器上的文件或目录](move-delete-remote-files.md)

# 传输文件
<a name="transfer-files-and-track"></a>

**Topics**
+ [使用 SFTP 连接器发送和检索文件](#send-retrieve-connector-details)

## 使用 SFTP 连接器发送和检索文件
<a name="send-retrieve-connector-details"></a>

要使用 SFTP 连接器发送和检索文件，您可以使用 [https://docs.aws.amazon.com/transfer/latest/APIReference/API_StartFileTransfer.html](https://docs.aws.amazon.com/transfer/latest/APIReference/API_StartFileTransfer.html)API 操作并指定以下参数，具体取决于您是*发送文件*（出站传输）还是*接收文件*（入站传输）。请注意，每个`StartFileTransfer`请求可以包含 10 个不同的路径。

**注意**  
 默认情况下，SFTP 连接器一次处理一个文件，按顺序传输文件。您可以选择让连接器与支持来自同一用户的并发会话的远程服务器创建并行会话，并行处理最多 5 个文件，从而提高传输性能。  
 要为任何连接器启用并发连接，可以在创建或更新**连接器时编辑 “最大并发连接数**” 设置。有关更多信息，请参阅 [使用服务管理的出口创建一个 SFTP 连接器](create-sftp-connector-procedure.md)。
+ **出站传输** 
  + `send-file-paths` 包含一到十个源文件路径，用于将文件传输到合作伙伴的 SFTP 服务器。
  + `remote-directory-path` 是客户的 SFTP 服务器上向其发送文件的远程路径。
+ **入站传输** 
  + `retrieve-file-paths` 包含一到十条远程路径。每个路径都指定了将文件从合作伙伴的 SFTP 服务器传输到您的 Transfer Family 服务器的位置。
  + `local-directory-path` 是存储文件的 Amazon S3 位置（存储桶和可选前缀）。

要发送文件，请指定 `send-file-paths` 和 `remote-directory-path` 参数。您最多可以为 `send-file-paths` 参数指定 10 个文件。以下示例命令将位于 Amazon S3 存储空间中的名为 `/amzn-s3-demo-source-bucket/file1.txt` 和 `/amzn-s3-demo-source-bucket/file2.txt` 的文件发送到合作伙伴的 SFTP 服务器上的 `/tmp` 目录。要使用此示例命令，请将 `amzn-s3-demo-source-bucket` 替换为您自己的存储桶。

```
aws transfer start-file-transfer --send-file-paths /amzn-s3-demo-source-bucket/file1.txt /amzn-s3-demo-source-bucket/file2.txt \
    --remote-directory-path /tmp --connector-id c-1111AAAA2222BBBB3 --region us-east-2
```

要检索文件，请指定`retrieve-file-paths`和`local-directory-path`参数。以下示例检索合作伙伴的 SFTP 服务器`/my/remote/file2.txt`上的文件`/my/remote/file1.txt`，并将其放置在 Amazon S3 位置 /amzn-s3-demo-bucket/ 中。*prefix*要使用此示例命令，请将 `user input placeholders` 替换为您自己的信息。

```
aws transfer start-file-transfer --retrieve-file-paths /my/remote/file1.txt  /my/remote/file2.txt \
   --local-directory-path /amzn-s3-demo-bucket/prefix --connector-id c-2222BBBB3333CCCC4 --region us-east-2
```

前面的示例指定了 SFTP 服务器上的绝对路径。您也可以使用相对路径：即相对于 SFTP 用户主目录的路径。例如，如果 SFTP 用户是 `marymajor`，而他们在 SFTP 服务器上的主目录是 `/users/marymajor/`，则以下命令会将 `/amzn-s3-demo-source-bucket/file1.txt` 发送到 `/users/marymajor/test-connectors/file1.txt`

```
aws transfer start-file-transfer --send-file-paths /amzn-s3-demo-source-bucket/file1.txt \
   --remote-directory-path test-connectors --connector-id c-2222BBBB3333CCCC4 --region us-east-2
```

# 列出远程目录的内容
<a name="sftp-connector-list-dir"></a>

在从远程 SFTP 服务器检索文件之前，可以检索远程 SFTP 服务器上目录的内容。为此，你可以使用 [https://docs.aws.amazon.com/transfer/latest/APIReference/API_StartDirectoryListing.html](https://docs.aws.amazon.com/transfer/latest/APIReference/API_StartDirectoryListing.html)API 操作。

以下示例列出了远程 SFTP 服务器上该`home`文件夹的内容，该内容是在连接器的配置中指定的。结果将放入 Amazon S3 位置`/amzn-s3-demo-bucket/connector-files`和名为的文件中`c-AAAA1111BBBB2222C-6666abcd-11aa-22bb-cc33-0000aaaa3333.json`。

```
aws transfer start-directory-listing  \
   --connector-id c-AAAA1111BBBB2222C  \ 
   --output-directory-path /amzn-s3-demo-bucket/example/connector-files  \
   --remote-directory-path /home
```

此 AWS CLI 命令返回列表 ID 和包含结果的文件的名称。

```
{
    "ListingId": "6666abcd-11aa-22bb-cc33-0000aaaa3333",
    "OutputFileName": "c-AAAA1111BBBB2222C-6666abcd-11aa-22bb-cc33-0000aaaa3333.json"
}
```

**注意**  
输出文件的命名约定为`connector-ID-listing-ID.json`。

JSON 文件包含以下信息：
+ `filePath`：远程文件的完整路径，相对于远程服务器上 SFTP 连接器的列出请求目录。
+ `modifiedTimestamp`：上次修改文件的时间，以秒为单位，采用协调世界时 (UTC) 格式。该字段是可选的。如果远程文件属性不包含时间戳，则文件列表中将省略该时间戳。
+ `size`: 文件的大小，以字节为单位。该字段是可选的。如果远程文件属性不包含文件大小，则会将其从文件列表中省略。
+ `path`：远程目录的完整路径，相对于远程服务器上的 SFTP 连接器的列出请求目录。
+ `truncated`: 一个标志，指示列表输出是否包含远程目录中包含的所有项目。如果您的`truncated`输出值为 true，则可以增加可选`max-items`输入属性中提供的值，以便能够列出更多项目（允许的最大列表大小为 10,000 个）。

以下是输出文件 (`c-AAAA1111BBBB2222C-6666abcd-11aa-22bb-cc33-0000aaaa3333.json`) 内容的示例，其中远程目录包含两个文件和两个子目录（路径）。

```
{
    "files": [
        {
            "filePath": "/home/what.txt",
            "modifiedTimestamp": "2024-01-30T20:34:54Z",
            "size" : 2323
        },
        {
            "filePath": "/home/how.pgp",
            "modifiedTimestamp": "2024-01-30T20:34:54Z",
            "size" : 4691
        }
    ],
    "paths": [
        {
            "path": "/home/magic"
        },
        {
            "path": "/home/aws"
        },
    ],
    "truncated": "false"
}
```

# 移动、重命名或删除远程服务器上的文件或目录
<a name="move-delete-remote-files"></a>

**Topics**
+ [移动或重命名远程 SFTP 服务器上的文件或目录](#move-remote-file)
+ [删除远程 SFTP 服务器上的文件或目录](#delete-remote-file)

## 移动或重命名远程 SFTP 服务器上的文件或目录
<a name="move-remote-file"></a>

您可以使用 SFTP 连接器移动或重命名远程 SFTP 服务器上的文件和目录。请注意，远程服务器需要支持这些操作才能成功使用连接器进行处理。

一些常见的用例如下。
+ 远程服务器每小时生成或接收一个新文件，文件名相同，但时间戳不同。要使主文件夹保持最新状态（使其仅包含最新文件），您可以使用连接器将较旧的文件移至已存档文件夹。
+ 您可以使用连接器列出远程目录中的所有文件，然后将所有文件传输到本地存储。然后，您可以使用连接器将文件移动到远程服务器上的已存档文件夹。

您必须对要处理的每个文件或目录使用`StartRemoteMove`调用，因为该命令将单个源文件和目标文件或目录作为参数。但是，您可以通过让连接器创建与远程服务器的并发会话来提高性能，这些会话支持来自同一用户的并行会话以及 move/rename 最多 5 个并行文件。

以下示例将远程 SFTP 服务器上的文件从移动`/source/folder/sourceFile`到`/destination/targetFile`，并返回该操作的唯一标识符。

```
aws transfer --connector-id c-AAAA1111BBBB2222C start-remote-move \
   --source-path /source/folder/sourceFile --target-path /destination/targetFile
```

**注意**  
对于这些 move/rename 操作，Transfer Family 使用标准`SFTP SSH_FXP_RENAME`命令来执行 move/rename 操作。

## 删除远程 SFTP 服务器上的文件或目录
<a name="delete-remote-file"></a>

您可以使用 SFTP 连接器删除远程 SFTP 服务器上的文件或目录。请注意，远程服务器需要支持这些操作才能成功使用连接器进行处理。

**注意**  
只有空目录才支持远程目录的删除操作。

一些常见的用例如下。
+ 您可以使用连接器从远程 SFTP 服务器检索文件，将其存储在 Amazon S3 存储桶中，然后对其进行加密。最后，您可以使用连接器删除远程服务器上未加密的文件。
+ 您可以使用连接器列出远程目录中的所有文件，然后将所有文件传输到本地存储。然后，您可以使用连接器删除您传输的所有文件。如果您愿意，也可以删除远程目录。

您必须对要删除的每个文件或目录使用`StartRemoteDelete`调用，因为该命令将单个文件或目录作为参数。但是，您可以让连接器与支持来自同一用户的并发会话的远程服务器创建并行会话，并行删除最多 5 个 files/directories 会话，从而提高性能。

以下示例删除远程 SFTP 服务器上路径中的一个文件`/delete/folder/deleteFile`，并返回该操作的唯一标识符。

```
aws transfer start-remote-delete --connector-id c-AAAA1111BBBB2222C \
   --delete-path /delete/folder/deleteFile
```

**注意**  
对于删除操作，Transfer Family 使用标准`SSH_FXP_REMOVE`命令删除文件和`SSH_FXP_RMDIR`删除目录。