Script Bash: คัดลอกภาพใหม่จาก SD ไปยังพีซี

บางครั้งเราจำเป็นต้องทำงานซ้ำ ๆ บนพีซีของเราซึ่งเมื่อเวลาผ่านไปกลายเป็นเรื่องน่าเบื่อ ในบางกรณีเราสามารถทำให้งานของเราง่ายขึ้นได้โดยใช้สคริปต์ที่เหมาะกับเรา

วันนี้ฉันเขียนเพื่อแสดงสคริปต์ทุบตีที่แก้ไขความต้องการ: คัดลอกภาพใหม่จากกล้องดิจิทัลของฉันจากการ์ด SD ไปยังพีซี

สถานการณ์:

ทุกครั้งที่มีการดาวน์โหลดรูปภาพใหม่ลงในคอมพิวเตอร์ฉันจะดำเนินการดังต่อไปนี้:

1. เปิดไดเร็กทอรีที่ฉันมีรูปภาพที่จัดอยู่ในไดเร็กทอรีย่อย

2. สร้างไดเร็กทอรีย่อยใหม่โดยใช้ชื่อของวันที่ปัจจุบันในรูปแบบ yy.mm.dd

3. ย้ายไปที่ไดเร็กทอรีย่อยที่สร้างขึ้นในครั้งก่อนและดูว่าภาพสุดท้ายที่บันทึกไว้คืออะไร

4. คัดลอกภาพใหม่จากการ์ด SD ไปยังไดเร็กทอรีที่สร้างขึ้นใหม่

การดำเนินการนี้ใช้เวลาไม่เกินหนึ่งนาที แต่สามารถทำได้ง่ายกว่าเพียงแค่ใส่การ์ดเข้าไป

ฉันต้องใช้การ์ดเพราะฉันไม่สามารถถ่ายโอนภาพจากกล้องโดยตรงผ่าน USB ได้เนื่องจากไม่มีไดรเวอร์สำหรับ Linux (เช่นเคย ... )

วิธีการแก้ปัญหา:

สร้างสคริปต์ทุบตีที่ทำสิ่งต่อไปนี้:

1. ตรวจสอบเมื่อเริ่มต้นระบบหากติดตั้งการ์ด SD ไม่งั้นก็จบ

2. ไปที่ไดเร็กทอรีหลักของรูปภาพและค้นหารูปภาพสุดท้าย บันทึกชื่อของคุณในตัวแปร

3. เปรียบเทียบวันที่ปัจจุบันกับไดเร็กทอรีสุดท้ายหากต่างกันให้สร้างไดเร็กทอรีใหม่โดยใช้ชื่อของวันที่ปัจจุบันในรูปแบบ "yy.mm.dd"

4. ย้ายไปที่ไดเร็กทอรีสุดท้าย (ไม่ใช่ไดเร็กทอรีใหม่ แต่เป็นไดเร็กทอรีที่เก่ากว่า) และบันทึกในตัวแปรชื่อของไฟล์สุดท้ายที่โอนในครั้งก่อน

ในขั้นตอนนี้จำเป็นต้องกรองชื่อของไฟล์เพื่อให้สามารถเปรียบเทียบกับไฟล์ใหม่ในการ์ดได้ในอนาคตอันใกล้ ไฟล์มีรูปแบบดังต่อไปนี้: XXX_xxxx.ee โดยที่: x = หลัก 0 ถึง 9 และ eee = ส่วนขยาย (JPG, MOV) ตัวอย่างเช่น 100_5684.JPG, 100_5699.MOV หลังจากตัวกรองชื่อยังคงเป็น xxxxxxx ดังนั้นในตัวอย่างด้านบนเราจะมี: 1005684, 1005699

เนื่องจากไดเร็กทอรีสามารถมีไฟล์ประเภทอื่นหรือมีชื่อที่เปลี่ยนแปลงจึงใช้ตัวกรอง

5. ย้ายไปที่การ์ดและกรองไฟล์เหมือนในจุดก่อนหน้า

6. เปรียบเทียบไฟล์บนการ์ดกับตัวแปรที่มีไฟล์สุดท้ายที่ถ่ายโอนในครั้งก่อน (จุดที่ 4) และคัดลอกไฟล์ที่มีชื่อลงในไดเร็กทอรีที่สร้างขึ้นใหม่ มากกว่าตัวแปร (เนื่องจากชื่อเป็นเพียงตัวเลข)

7. เปิดไดเร็กทอรีที่มีอิมเมจใหม่ด้วยตัวจัดการไฟล์

ต่อไปฉันจะแสดงสคริปต์พร้อมความคิดเห็นที่อธิบายวิธีการทำงาน ฉันชี้แจงว่าฉันไม่ใช่โปรแกรมเมอร์และมันทำให้ฉันปวดหัวหลายครั้งจนทำงานได้โดยเฉพาะอย่างยิ่งเมื่อฉันต้องกรองชื่อสำหรับลูป "for"

#! / bin / bash ### --- ตรวจสอบว่า SD ติดตั้ง --- ### SD = / media / KODAK / DCIM / 100Z8612 ถ้า [[-d $ SD]]; จากนั้น ### --- สร้าง DIRECTORY --- ### # อ่านไดเร็กทอรีของรูปภาพและสร้างใหม่โดยใช้ชื่อ # วันที่ปัจจุบันและสิทธิ์ 755 หากไม่มีอยู่ cd ~ / รูปภาพ / kodak ULTDIR = `ls -1 | tail -n1` # ไดเร็กทอรีสุดท้ายในรายการ DATE = `วันที่ +% y.% M. % D` # วันที่ปัจจุบันในรูปแบบ YY.MM.DD ถ้า [" $ LASTDIR "! =" $ DATE "]; จากนั้น mkdir -vm 755`date +% y.% m.% d` # สร้างไดเร็กทอรีด้วยวันที่ปัจจุบัน ### --- ดูไฟล์สุดท้ายของ $ ULTDIR --- ### cd $ ULTDIR ULTIMG = `ls - 1 [0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] | หาง -n1 | cut -c1-3,5-8` # ดูภาพสุดท้ายที่มีชื่อ xxx_XXXX.eee .eee = นามสกุลไฟล์ (JPG หรือ MOV) # เพื่อให้แน่ใจว่าสคริปต์ทำงานได้หลังจากดำเนินการเสร็จสิ้น: # 100_9999.eee - > 101_0000.eee และไม่มีข้อผิดพลาด # CUT เพื่อให้อยู่ในรูปแบบ xxxXXXX ### --- ย้ายไปยังทิศทางสุดท้ายของรายการ --- ### # หรือสร้างล่าสุดถ้า # cd ถูกสร้างขึ้น .. ULTDIR = `ls -1 | tail -n1` # ไปอีกครั้งเพราะมิฉะนั้นจะใช้ ULTDIR ก่อนหน้าของ if cd / media / KODAK / DCIM / 100Z8612 ### --- กรองไฟล์ใน SD --- ### FILTER = `ls -1 [0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] `### - - เปรียบเทียบไฟล์ใหม่กับ NAME ที่ยิ่งใหญ่กว่าครั้งสุดท้าย --- ### สำหรับฉันใน $ FILTER do N = `echo $ I | cut -c1-3,5-8` # ตัดชื่อ if [["$ ULTIMG" -lt "$ N"]]; จากนั้น cp $ I ~ / Pictures / kodak / $ ULTDIR fi done thunar ~ / Pictures / kodak / $ ULTDIR # เปิดไดเร็กทอรีใหม่ด้วย Thunar else exit 0 fi exit 0

ในที่สุดเพื่อให้ใช้งานได้ฉันได้เพิ่มลงในแอปพลิเคชัน "Removable Drives and Media" ของ Xfce ในเมนู

การตั้งค่า→ตัวจัดการการตั้งค่า Xfce 4 →ไดรฟ์และสื่อแบบถอดได้→กล้องถ่ายรูป

โดยใช้ตัวเลือกการนำเข้ารูปภาพ เมื่อฉันใส่การ์ดกล่องโต้ตอบจะถามว่าฉันต้องการนำเข้าภาพหรือไม่ เมื่อยอมรับสคริปต์จะดำเนินการ

นั่นแหล่ะ ขออภัยในความยุ่งเหยิงของข้อความนี่เป็นโพสต์แรกของฉันและฉันไม่รู้ว่าจะจัดตารางสคริปต์อย่างไรเมื่อแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์สำหรับใครบางคนอย่างน้อยก็มีความคิดและนำไปปรับใช้กับแต่ละกรณีโดยเฉพาะ

ฉันไม่ได้รับใบอนุญาตเนื่องจากฉันไม่ได้แจ้งให้ตัวเองทราบอย่างดีเกี่ยวกับ GPL แต่ละเวอร์ชัน แต่พวกเขามีเสรีภาพที่จะคัดลอกและแก้ไข และอย่าลังเลที่จะบอกว่าจะปรับปรุงได้อย่างไรหรือมีวิธีอื่นที่จะทำเช่นเดียวกัน แต่ง่ายกว่า

แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   เพอร์แคฟ_TI99 dijo

    Joaquínที่น่าสนใจมากความคิดที่ดีคือการอัปโหลดสคริปต์ในการวางซึ่งจะง่ายต่อการแบ่งปันรหัสและอย่างที่คุณบอกว่ามันสามารถปรับให้เข้ากับความต้องการอื่น ๆ ได้และคนหนึ่งเรียนรู้ที่จะใช้ทุบตีอีกเล็กน้อย

    ทักทาย !!!

    1.    Joaquin dijo

      เสร็จแล้วเพิ่มเข้ามา http://paste.desdelinux.net/4737
      ขอบคุณ!

  2.   vr_rv dijo

    เมื่อคัดลอกรูปถ่ายที่มีอยู่แล้วในไดเร็กทอรีไม่ได้ระบุว่ามีอยู่แล้วและให้คุณมีตัวเลือกในการแทนที่หรือไม่คัดลอก?

    อย่างไรก็ตามมันมีประโยชน์มากเนื่องจากมันทำทุกอย่างโดยอัตโนมัติ

    1.    Joaquin dijo

      สวัสดี. มันไม่ได้คัดลอกภาพที่ทำซ้ำ แต่เพียงแค่เพิกเฉย แนวคิดคือการคัดลอกไฟล์ใหม่โดยไม่จำเป็นต้องโต้ตอบกับผู้ใช้ นอกจากนี้เว้นแต่คุณจะเพิ่มรูปภาพมากกว่าวันละครั้งสคริปต์จะคัดลอกไฟล์ใหม่ไปยังไดเร็กทอรีใหม่ ฉันอธิบายสั้น ๆ :

      วันนี้คือ 10/03/13 ฉันสร้างไดเร็กทอรีชื่อ 13.03.10/100/4440 และคัดลอกรูปภาพหรือวิดีโอ (MOV) ภายใน: 100_4441.JPG, 100_4442.JPG, 100_4445.MOV, XNUMX_XNUMX.JPG
      (4443 และ 4444 ที่หายไปถูกลบด้วยกล้องตัวสุดท้ายคือ 4445)

      จากนั้นสมมติว่าฉันใช้สคริปต์ในวันที่ 01/04/13 และมีภาพใหม่ในการ์ด สคริปต์สร้างไดเร็กทอรีชื่อ 13.04.01 และภายในรูปภาพ / วิดีโอใหม่ที่มีชื่อมากกว่า "4445" เนื่องจากอ่านไดเร็กทอรี 13.03.10 และภาพสุดท้ายคือ 100_4445.JPG หากฉันรันสคริปต์อีกครั้งด้วยอิมเมจใหม่จากการ์ดในวันเดียวกันนั้นจะถูกเพิ่มลงในไดเร็กทอรี 13.04.01 ไม่มีการเขียนทับ

      ฉันหวังว่าฉันจะได้ชี้แจงความคิดของฉันสักหน่อย🙂

  3.   มนุยติ dijo

    และคุณไม่รู้จัก Rapid Photo Downloader? ฉันคิดว่ามันทำได้ทั้งหมดและอื่น ๆ

    1.    นายดำ dijo

      ประเด็นก็คือคนผอมทำเองเขาคงสนุกฉันเดาว่ามันสามารถรับใช้คนอื่นได้

    2.    Joaquin dijo

      สวัสดี. ฉันไม่รู้และดูเหมือนว่าจะดีจากสิ่งที่ฉันเห็นบนอินเทอร์เน็ต แต่จริงๆแล้วสคริปต์ตอบสนองสิ่งที่ฉันต้องการได้อย่างสมบูรณ์แบบ ซึ่งก็คือการใส่การ์ดและคัดลอกไฟล์ทั้งหมดโดยอัตโนมัติ

      นอกจากนี้ยังช่วยให้ฉันเรียนรู้มากขึ้นเล็กน้อยเพราะเห็นได้ชัดว่ามันไม่ได้ผลในครั้งแรก เกิดข้อผิดพลาดและเรียนรู้มากมายจากพวกเขา

      ฉันไม่ได้ตั้งใจจะแสดงสคริปต์เพื่อแก้ปัญหาให้กับผู้อื่นมีแอปพลิเคชั่นเช่นเดียวกับที่คุณพูดถึงซึ่งเป็นเรื่องทั่วไป ฉันแบ่งปันให้คุณอ่านและเป็นข้อมูลอ้างอิงในการสร้างสิ่งใหม่ ๆ โดยใช้ลูป (ในกรณีนี้คือ "for") และนิพจน์ทั่วไป (ตัวแปร "ULTIMG" และ "FILTER" ในสคริปต์)

  4.   โค้ดแล็บ dijo

    ดูเหมือนมีประโยชน์ฉันเก็บไว้เผื่อว่าวันหนึ่งฉันต้องการมัน ขอขอบคุณ.

    1.    Joaquin dijo

      ขอบคุณ!

  5.   ไม่มีชื่อ dijo

    แต่สำหรับสิ่งนั้นเรามี grsync อยู่แล้ว

    1.    Joaquin dijo

      ใช่ แต่ฉันคิดว่า rsync ใช้สำหรับการสำรองข้อมูลมากกว่า ฉันไม่เคยดูเลย แต่เป็นแอปพลิเคชันที่เราควรคำนึงถึงและเรียนรู้จากพวกเราทุกคน

      ฉันไม่รู้ว่ามีอินเทอร์เฟซแบบกราฟิกสำหรับ rsync

  6.   ใหม่ล่าสุด dijo

    ว้าวฉันพบว่าโค้ดน่าสนใจมากมีประโยชน์มาก ให้มันขึ้น 😀
    ฉันจะเก็บไว้ในกรณีที่ฉันต้องการ

    อาศิรพจน์

    1.    Joaquin dijo

      ขอขอบคุณ!.