如何使用终端获取 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 对象集合,那么这将是一些额外的工作。
我是终端命令的新手。我知道如果文件是本地的,我们可以做类似 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 对象集合,那么这将是一些额外的工作。