ฉันมีปัญหา*ในการใช้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 จะรวมเฉพาะไฟล์ที่ถูกแยกออกจากตัวกรอง - ไม่รวมอีกครั้ง หากคุณต้องการอัปโหลดไฟล์ที่มีนามสกุลเฉพาะก่อนอื่นคุณต้องยกเว้นไฟล์ทั้งหมดจากนั้นรวมไฟล์ที่มีนามสกุลเฉพาะอีกครั้ง