如何使用终端获取 AWS S3 目录中所有单个文件的行数?

How to get a line count of all individual files in a directory on AWS S3 using a terminal?

我是终端命令的新手。我知道如果文件是本地的,我们可以做类似 wc -l directory/* 的事情。 但是我如何使用终端在 AWS S3 上实现相同的目的呢? 输出应该是文件名和计数。

例如, S3 的目录中存在两个文件 - 'abcd.txt'(文件中的 5 行)和 'efgh.txt'(文件中的 10 行)。我想要每个文件的行数而不使用终端下载文件。 输出 - 'abcd.txt' 5 'efgh.txt'10

简单的命令是做不到的。 Amazon S3 不提供 'remotely' 计算对象行数的功能。

相反,您需要将文件下载到您的计算机,然后计算行数。

如果有用,这里有一个使用 awscli 的快速 shell 脚本。

#!/bin/bash

FILES=$(aws s3 ls s3://mybucket/csv/ | tr -s ' ' | cut -d ' ' -f4)

for file in $FILES; do
    echo $file, $(aws s3 cp s3://mybucket/csv/$file - | wc -l)
done

输出示例:

planets.csv, 8
countries.csv, 195
continents.csv, 7

请注意,它有效地将单个文件下载到标准输出,然后对它们进行行计数,因此它不会在本地保留任何文件。如果你想让它递归地工作或针对包含 non-text 文件的 S3 对象集合,那么这将是一些额外的工作。