使用while循环和bash重定向将s3 cp日志重定向到单个文件不工作|正在创建多个日志文件 &g



我正在尝试使用bash shell脚本将s3 cp命令输出保存到单个日志文件。我的脚本从另一个名为output的文件中获取源和目标桶信息。TSV实际上是一个while循环的输入。像下面。我使用&>>将输出重定向到时间戳为

的文件
while read SOURCE DESTINATION
do
aws s3 cp $SOURCE $DESTINATION &>> /shared_data/logs/logs-$(date +"%b-%d-%Y-%H-%M-%Z").log
done < output.tsv

s3 cp日志应该被重定向/附加到单个日志文件,但我看到的是日志文件每分钟创建一次,而不是重定向到单个文件。仅供参考,我正试图复制大量文件,我的脚本运行了一个小时。

-rwxrwxr-- 1 user1 group1 33K Oct 28 06:13 logs-Oct-28-2021-06-12-PDT.log

-rwxrwxr-- 1 user1 group1 33K Oct 28 06:14 logs-Oct-28-2021-06-13-PDT.log

-rwxrwxr-- 1 user1 group1 53K Oct 28 06:15 logs-Oct-28-2021-06-14-PDT.log

(我不是AWS S3用户,但是)关于您的用例,只是与shell问题相关,您可以在while循环之外定义文件名:

log="/shared_data/logs/logs-$(date +"%b-%d-%Y-%H-%M-%Z").log"
while read SOURCE DESTINATION; do
aws s3 cp "$SOURCE" "$DESTINATION" &>> "$log"
done < output.tsv

顺便说一句,请注意,您可能希望更改date格式字符串以使用更标准的(类似于ISO-8601)编码:

log="/shared_data/logs/logs-$(date -u +"%Y-%m-%d_%H-%M-%S").log"
这个date命令的优点是:
  • 从字典顺序上讲,字符串排序顺序与日期的排序顺序匹配;
  • 并使用UTC时区(感谢选项-u):
$ date -u +"%Y-%m-%d_%H-%M-%S"
2021-10-28_16-42-00

相关内容

  • 没有找到相关文章

最新更新