Bash 循环将变量分配给文件名的各个部分,然后在dir中的每个文件的命令中使用

Bash 循环将变量分配给文件名的各个部分,然后在dir中的每个文件的命令中使用,bash,loops,amazon-s3,Bash,Loops,Amazon S3,我想将文件上载到日期分区的s3对象中。我在目录中有很多文件,希望将每个文件移动到从文件名中的日期派生的文件夹结构中 for file in /home/ec2-user/clickparts/t*; do year="${file:9:4}"; month="${file:14:2}"; day="${file:17:2}"; aws s3 cp "$file" s3://bk-py-dev/json/clicks/clickpartition/$year/$month/$day/; done

我想将文件上载到日期分区的s3对象中。我在目录中有很多文件,希望将每个文件移动到从文件名中的日期派生的文件夹结构中

for file in /home/ec2-user/clickparts/t*; do year="${file:9:4}"; month="${file:14:2}"; day="${file:17:2}"; aws s3 cp "$file" s3://bk-py-dev/json/clicks/clickpartition/$year/$month/$day/; done

如果我能用这种一行的格式来做,那就太棒了。文件名的格式为_date=2019-03-05。json

您已经有了一个很好的解决方案。另一种选择是

topdir="bk-py-dev/json/clicks/clickpartition"
while IFS=- read -r xxxyear month dayjson; do
   aws s3 cp "${xxxyear}-${month}-${dayjson}" s3://${topdir}/${xxxyear#*=}/${month}/${dayjson%.*}
done < <(find * -maxdepth 0 -type f -name '*.json' )
topdir=“bk py dev/json/clicks/clickpartition”
而IFS=-read-r xxxyear month dayjson;做
aws s3 cp“${xxxyear}-${month}-${dayjson}”s3://${topdir}/${xxxyear}.*=}/${month}/${dayjson%.*}
完成<