Script bash: انسخ الصور الجديدة من SD إلى جهاز الكمبيوتر

نحتاج أحيانًا إلى أداء مهام متكررة على جهاز الكمبيوتر الخاص بنا ، والتي بمرور الوقت تصبح مملة. في بعض الحالات ، يمكننا تسهيل عملنا من خلال استخدام البرامج النصية التي تناسبنا.

أكتب اليوم لأريكم برنامجًا نصيًا باشًا حل حاجة: نسخ صور جديدة من الكاميرا الرقمية الخاصة بي من بطاقة SD إلى جهاز الكمبيوتر.

الوضع:

في كل مرة لدي صور جديدة لتنزيلها على جهاز الكمبيوتر الخاص بي ، أفعل ما يلي:

1. افتح الدليل حيث لدي الصور مصنفة في أدلة فرعية.

2. قم بإنشاء دليل فرعي جديد باسم التاريخ الحالي ، بتنسيق yy.mm.dd

3. الانتقال إلى الدليل الفرعي الذي تم إنشاؤه في المرة السابقة ومعرفة ما هي الصورة الأخيرة المحفوظة.

4. انسخ الصور الجديدة من بطاقة SD إلى الدليل الذي تم إنشاؤه حديثًا.

لا يستغرق ذلك أكثر من دقيقة ، ولكن من الأسهل أن تتم العملية بمجرد إدخال البطاقة.

لا بد لي من استخدام البطاقة لأنني لا أستطيع نقل الصور مباشرة من الكاميرا عبر USB ، نظرًا لعدم وجود برامج تشغيل Linux (كما يحدث دائمًا ...)

الحل:

قم بإنشاء برنامج نصي bash يقوم بما يلي:

1. تحقق عند بدء التشغيل من تركيب بطاقة SD. وإلا فإنه ينتهي.

2. انتقل إلى الدليل الرئيسي للصور وابحث عن آخر صورة. احفظ اسمك في متغير.

3. قارن التاريخ الحالي بالدليل الأخير ، إذا كانا مختلفين ، قم بإنشاء دليل جديد مع اسم التاريخ الحالي بالتنسيق "yy.mm.dd".

4. انتقل إلى الدليل الأخير (ليس الدليل الجديد ، ولكن الأقدم) واحفظ في متغير اسم الملف الأخير الذي تم نقله في المرة السابقة.

في هذه الخطوة ، من الضروري تصفية اسم الملف لتتمكن من مقارنته بالملفات الجديدة الموجودة على البطاقة في المستقبل القريب. الملفات بالتنسيق التالي: XXX_xxxx.eee حيث: 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 if [[-d $ SD]]؛ ثم ### --- إنشاء دليل --- ### # قراءة دليل للصور وإنشاء دليل آخر باسم # التاريخ الحالي والأذونات 755 إذا لم يكن موجودًا. cd ~ / Pictures / kodak ULTDIR = `ls -1 | tail -n1` # آخر دليل في القائمة. DATE = `التاريخ +٪ y.٪ M.٪ D` # التاريخ الحالي بتنسيق YY.MM.DD إذا [" $ LASTDIR "! =" $ DATE "] ؛ ثم mkdir -vm 755`date +٪ y.٪ m.٪ d` # إنشاء دليل بالتاريخ الحالي fi ### --- شاهد آخر ملف 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-100` # انظر الصورة الأخيرة بالاسم xxx_XXXX.eee .eee = امتداد الملف (JPG أو MOV) # للتأكد من أن البرنامج النصي يعمل بعد تنفيذه: # 9999_101.eee -> 0000_1. eee ولا توجد أخطاء # CUT بحيث يكون بتنسيق xxxXXXX ### --- انتقل إلى آخر دليل في القائمة --- ### # أو تم إنشاؤه مؤخرًا ، إذا تم إنشاء # cd .. أخيرًا = `ls -1 | tail -n100` # يذهب مرة أخرى لأنه بخلاف ذلك يأخذ ULTDIR السابق لـ if cd / media / KODAK / DCIM / 8612Z1 ### --- تصفية الملفات بتنسيق SD --- ### FILTER = `ls -0 [ 9 -0] [9-0] [9-0] _ [9-0] [9-0] [9-0] [9-1]. [JM] [PO] [GV] `### - - مقارنة الملفات الجديدة التي تحمل اسمًا أكبر من آخر --- ### بالنسبة لي في $ FILTER do N = `echo $ I | cut -c3,5-8،0-0` # اسم القطع إذا [["$ ULTIMG" -lt "$ N"]]؛ ثم cp $ I ~ / Pictures / kodak / $ ULTDIR fi done thunar ~ / Pictures / kodak / $ ULTDIR # افتح الدليل الجديد باستخدام Thunar else الخروج XNUMX fi مخرج XNUMX

أخيرًا لتشغيله ، أضفته إلى تطبيق "محركات الأقراص والوسائط القابلة للإزالة" الخاص بـ Xfce في القائمة

الإعدادات ← مدير إعدادات Xfce 4 ← محركات الأقراص والوسائط القابلة للإزالة ← الكاميرات

باستخدام خيار استيراد الصورة. عندما أقوم بإدخال البطاقة ، يسألك مربع حوار عما إذا كنت أرغب في استيراد الصور. عند القبول ، يتم تنفيذ البرنامج النصي.

حسنًا ، هذا كل شيء. آسف على فوضى النص ، فهذه أول مشاركة لي ولا أعرف كيفية جدولة النص عند تحريره. آمل أن يكون من المفيد لشخص ما على الأقل أن يكون لديه فكرة وأن يتكيف مع كل حالة على حدة.

لم أحصل على الترخيص لأنني لم أعلم نفسي جيدًا بكل إصدار من GPL ، لكن لهم الحرية في نسخها وتعديلها. ولا تتردد في قول كيف يمكن تحسينه أو ما إذا كانت هناك طرق أخرى لفعل الشيء نفسه ، ولكن أسهل.

محتوى المقال يلتزم بمبادئنا أخلاقيات التحرير. للإبلاغ عن خطأ انقر فوق هنا.

13 تعليقات ، اترك لك

اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   Percaff_TI99 قال

    Joaquín مثير جدًا للاهتمام ، والفكرة الجيدة هي تحميل البرنامج النصي في المعجون حيث يسهل مشاركة الكود ، وكما تقول ، يمكن تكييفه مع الاحتياجات الأخرى ويتعلم المرء استخدام bash أكثر قليلاً.

    تحية!

    1.    خواكين قال

      تم ، مضاف في http://paste.desdelinux.net/4737
      بفضل!

  2.   vr_rv قال

    عند نسخ صورة موجودة بالفعل في الدليل ، لا يشير ذلك إلى وجود واحدة بالفعل ويمنحك خيار استبدالها أو عدم نسخها؟

    على أي حال إنه مفيد للغاية ، لأنه يفعل كل شيء تلقائيًا

    1.    خواكين قال

      مرحبا. إنه لا ينسخ الصور المكررة في الواقع ، بل يتجاهلها فقط. كانت الفكرة على وجه التحديد نسخ الملفات الجديدة دون الحاجة إلى تفاعل المستخدم. أيضًا ، ما لم تقم بإضافة الصور أكثر من مرة في اليوم ، يقوم البرنامج النصي بنسخ الملفات الجديدة إلى دليل جديد. أشرح باختصار:

      اليوم هو 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.   مانوتي قال

    وأنت لا تعرف برنامج Rapid Photo Downloader؟ أعتقد أنه يفعل كل ذلك وأكثر.

    1.    السيد بلاك قال

      النقطة المهمة هي أن الرجل النحيف فعل ذلك بنفسه ، وكان سيستمتع على ما أعتقد ويمكن أن يخدم شخصًا آخر

    2.    خواكين قال

      مرحبا. لم أكن أعرف ذلك ويبدو جيدًا مما رأيته على الإنترنت ، ولكن في الواقع ، فإن السيناريو يلبي تمامًا ما أحتاجه ؛ وهو إدخال البطاقة ونسخ جميع الملفات تلقائيًا.

      لقد ساعدني أيضًا في تعلم المزيد لأنه من الواضح أنه لم ينجح في المرة الأولى ؛ حدثت أخطاء وتم تعلم الكثير منها.

      لم أكن أنوي عرض البرنامج النصي لحل المشكلات للآخرين ، فهناك تطبيقات مثل تلك التي ذكرتها وهي أكثر عمومية. لقد شاركته لك لكي تقرأه وكمرجع لإنشاء أشياء جديدة باستخدام الحلقات (في هذه الحالة "for") والتعبيرات العادية (المتغيرات "ULTIMG" و "FILTER" في البرنامج النصي)

  4.   مختبر كود قال

    يبدو مفيدًا ، احتفظ به في حال احتجت إليه يومًا ما. شكرا.

    1.    خواكين قال

      بفضل!

  5.   بدون اسم قال

    ولكن لذلك لدينا بالفعل grsync

    1.    خواكين قال

      نعم ، لكنني أعتقد أن rsync يستخدم أكثر للنسخ الاحتياطية. لم أنظر إليه مطلقًا ولكنه تطبيق يجب أن نأخذه في الاعتبار ونتعلم منا جميعًا.

      لم أكن أعرف أن هناك واجهة رسومية لـ rsync.

  6.   lastnewbie قال

    واو ، أجد الكود ممتعًا جدًا ومفيدًا جدًا. أبقه مرتفعا. 😀
    سأحتفظ به في حال احتجت إليه.

    تحية.

    1.    خواكين قال

      شكرا لك!