I currently have a bat file that copies the last modified file from AWS S3 bucket to local folder.
for /f "delims=" %%i in ('aws s3api list-objects-v2 --bucket example.sftp --prefix data/ --query "sort_by(Contents, &LastModified)[-1].Key" --output text') do set object=%%i
aws s3 cp s3://example.sftp/%object% E:DATA_S3
I want to modify this to get two files when sorted by last modified instead of one. Changing [-1]
to [-2]
is not working.
2
Answers
JMESPath uses Python syntax for referencing lists, so use:
This means "from the second last element to the end of the list".
I highly recommend the JMESPath Tutorial, which includes interactive testing of commands. I tested this concept using that page.
You can use a JMESPath query to get the two most recent items using
[-2:]
, and operate on each one in turn. Note that in the path, instead of using.Key
, use.[Key]
, which causes AWS CLI’s text output to delimit with newlines instead of tabs, allowing for easy parsing by thefor
operator of the batch file: