ฉันมีปัญหา*
ในการใช้AWS CLI เพื่อเลือกไฟล์ย่อยจากที่เก็บข้อมูลบางส่วน
การเพิ่ม*
เส้นทางเช่นนี้ดูเหมือนจะไม่ได้ผล
aws s3 cp s3://data/2016-08* .
ฉันมีปัญหา*
ในการใช้AWS CLI เพื่อเลือกไฟล์ย่อยจากที่เก็บข้อมูลบางส่วน
การเพิ่ม*
เส้นทางเช่นนี้ดูเหมือนจะไม่ได้ผล
aws s3 cp s3://data/2016-08* .
คำตอบ:
ดาวน์โหลดไฟล์หลายไฟล์จากถัง AWS ไปยังไดเรกทอรีปัจจุบันของคุณคุณสามารถใช้recursive
, exclude
และinclude
ธงเช่นนี้
aws s3 cp s3://data/ . --recursive --exclude "*" --include "2016-08*"
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ตัวกรองเหล่านี้: http://docs.aws.amazon.com/cli/latest/reference/s3/#use-of-exclude-and-include-filters
sync
เพื่อให้ได้เอฟเฟกต์ที่คล้ายกันซึ่งจะเกิดซ้ำตามค่าเริ่มต้น:aws s3 sync s3://data/ . --exclude "*" --include "2016-08*"
--dryrun
แฟล็กเพื่อให้แน่ใจว่าไวด์การ์ดเลือกชุดวัตถุที่ถูกต้อง
ลำดับของพารามิเตอร์มีความสำคัญ
ควรใช้การยกเว้นและรวมในลำดับที่เฉพาะเจาะจงเราต้องแยกออกก่อนแล้วจึงรวม ในทางกลับกันของมันจะไม่ประสบความสำเร็จ
aws s3 cp s3://data/ . --recursive --include "2016-08*" --exclude "*"
สิ่งนี้จะล้มเหลวเนื่องจากลำดับของพารามิเตอร์มีค่าในกรณีนี้ การรวมไม่รวมอยู่ใน *
aws s3 cp s3://data/ . --recursive --exclude "*" --include "2016-08*"`
อันนี้ใช้ได้เพราะเรายกเว้นทุกอย่าง แต่ต่อมาเราได้รวมไดเร็กทอรีเฉพาะ
โอเคฉันต้องบอกว่าตัวอย่างไม่ถูกต้องและควรได้รับการแก้ไขดังนี้:
aws s3 cp . s3://data/ --recursive --exclude "*" --include "2006-08*" --exclude "*/*"
ความต้องการที่จะได้รับสิทธิหลังจากที่.
cp
ขั้นสุดท้าย--exclude
คือตรวจสอบให้แน่ใจว่าไม่มีอะไรถูกหยิบขึ้นมาจากไดเรกทอรีย่อยใด ๆ ที่ถูกหยิบขึ้นมาโดย--recursive
(เรียนรู้ว่าหนึ่งโดยไม่ได้ตั้งใจ ... )
สิ่งนี้จะใช้ได้กับทุกคนที่ดิ้นรนกับสิ่งนี้เมื่อมาถึงที่นี่
--exclude "*"
นี่ไม่ใช่การพิมพ์ผิด หากคุณไม่ได้เพิ่มมันรวมถึงจะตรงกับอะไร ตามเอกสารประกอบ: โปรดทราบว่าโดยค่าเริ่มต้นไฟล์ทั้งหมดจะรวมอยู่ด้วย ซึ่งหมายความว่าการระบุเฉพาะตัวกรอง --include จะไม่เปลี่ยนแปลงไฟล์ที่จะถ่ายโอน --include จะรวมเฉพาะไฟล์ที่ถูกแยกออกจากตัวกรอง - ไม่รวมอีกครั้ง หากคุณต้องการอัปโหลดไฟล์ที่มีนามสกุลเฉพาะก่อนอื่นคุณต้องยกเว้นไฟล์ทั้งหมดจากนั้นรวมไฟล์ที่มีนามสกุลเฉพาะอีกครั้ง