wc -l针对S3存储桶中的所有文件

时间:2018-04-02 16:58:08

标签: amazon-web-services amazon-s3 aws-cli

我有一个包含许多文件的s3存储桶的路径。使用aws-cli,是否有一个命令可以让我读取所有文件和| wc -l对输出?我正在尝试计算s3存储区中所有文件的所有行

4 个答案:

答案 0 :(得分:1)

将列表递归到存储桶中,然后将复制命令运行到stdout。这有助于在机器上下载文件。

您可以按照以下命令为我工作:

aws s3 ls --recursive s3://bucket-name/ | while read FILENAME; do
 echo "$FILENAME"
 if [ "$(aws s3 cp "$FILENAME" - | wc -l)" -eq 0 ]; then
  echo "0"
 else
  aws s3 cp "$FILENAME" - | wc -l
 fi
done | paste -d, - -

输出:

s3://bucket-name/a.txt,343
s3://bucket-name/b.txt,0

答案 1 :(得分:1)

与Linux命令相同,在s3中列出目录中的文件,并使用wc -l逐行计数

aws s3 ls s3://bucket-name/ | wc -l

答案 2 :(得分:0)

或者,您可以使用 S3 Select 使用 Python/boto3 计算 Parquet/CSV/gzip/bzip2 文件中的行数。

sql_stmt    = """SELECT count(*) FROM s3object S"""   
req_fact =s3.select_object_content( 
    Bucket  = bucket_name, 
    Key     = s3_key, 
    ExpressionType  = 'SQL', 
    Expression      = sql_stmt, 
    InputSerialization={'Parquet': {}}, 
    OutputSerialization = {'CSV': { 
                'RecordDelimiter': os.linesep, 
                'FieldDelimiter': colsep}}, 
     
) 

请注意,您只能将其应用于 Parquet 和 CSV 文件,并且不适用于原始的非结构化日志。 检查 async counter 以获取完整的 Python 示例。

答案 3 :(得分:-1)

您可以从列出所有S3存储桶开始 -

aws s3 ls

要列出特定存储桶中的对象,请尝试 -

aws s3 ls s3://mybucket

要回答你的问题,你可以做 -

aws s3 cp s3://mybucket/myfile.txt - | wc -l

有关更多awscli S3命令,请查看此link