反正有没有用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
我在 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