反正有没有用aws cli复制csv中存在的文件列表?

Is there anyway to copy list of files which exist inside the csv with aws cli?

我在 s3 存储桶上有一个名为 all-files 的文件夹,其中包含 35K 个文件。我有一个 CSV 文件 (errors.csv),它有 1K 个文件名,这个文件名是 35K 个文件名的子集。我需要将 1k 文件(来自 csv)从 35K all-files 文件夹复制到同一存储桶上名为 errors 的某个新文件夹。

这可能吗?如果是,如何?

我尝试使用 cp 命令和 include 模式,但它似乎不支持来自 csv 文件的输入。

由于您没有具体说明是否使用 Linux,我假设 Linux。

bash 中最 基本的 方法如下(您没有提供任何示例文件内容来使用):

# populate example `/tmp/files.csv` file:

cat >/tmp/files.csv << EOF
file1
file2
file3
file4
file5
file6
file7
EOF

/tmp/files.csv中逐行读取并执行aws s3 mv:

while read file; do
  echo "aws s3 mv s3://<bucket>/${file} s3://<otherbucket>/${file}"
done < /tmp/files.csv

这导致:

aws s3 mv s3://<bucket>/file1 s3://<otherbucket>/file1
aws s3 mv s3://<bucket>/file2 s3://<otherbucket>/file2
aws s3 mv s3://<bucket>/file3 s3://<otherbucket>/file3
aws s3 mv s3://<bucket>/file4 s3://<otherbucket>/file4
aws s3 mv s3://<bucket>/file5 s3://<otherbucket>/file5
aws s3 mv s3://<bucket>/file6 s3://<otherbucket>/file6
aws s3 mv s3://<bucket>/file7 s3://<otherbucket>/file7

更复杂的示例,将涉及 运行 命令 并发 ,同时移动几个文件。

同时移动 3 个文件的例子:

cat /tmp/files.csv | xargs -L 3 echo | while read files; do

    echo -e "\nMove a set of files at the same time:"

    for file in ${files}; do
        echo "aws s3 mv s3://<bucket>/${file} s3://<otherbucket>/${file}" &
    done

    wait 

done

输出:

Move a set of files at the same time:
aws s3 mv s3://<bucket>/file1 s3://<otherbucket>/file1
aws s3 mv s3://<bucket>/file2 s3://<otherbucket>/file2
aws s3 mv s3://<bucket>/file3 s3://<otherbucket>/file3

Move a set of files at the same time:
aws s3 mv s3://<bucket>/file4 s3://<otherbucket>/file4
aws s3 mv s3://<bucket>/file5 s3://<otherbucket>/file5
aws s3 mv s3://<bucket>/file6 s3://<otherbucket>/file6

Move a set of files at the same time:
aws s3 mv s3://<bucket>/file7 s3://<otherbucket>/file7