Script Bash: העתק תמונות חדשות מ- SD למחשב

לפעמים אנחנו צריכים לבצע משימות חוזרות ונשנות במחשב האישי שלנו, שעם הזמן הופכות למייגעות. במקרים מסוימים אנו יכולים להקל על עבודתנו על ידי שימוש בתסריטים המתאימים לנו.

היום אני כותב כדי להראות לך סקריפט bash שפתר צורך: להעתיק תמונות חדשות מהמצלמה הדיגיטלית שלי מכרטיס SD למחשב האישי.

מַצָב:

בכל פעם שהיו לי להוריד תמונות חדשות למחשב שלי, הייתי עושה את הפעולות הבאות:

1. פתח את הספרייה שבה יש לי את התמונות המסווגות בספריות משנה.

2. צור ספריה משנה חדשה עם שם התאריך הנוכחי, בפורמט yy.mm.dd

3. עבור לתיקיית המשנה שנוצרה בפעם הקודמת ובדוק מה התמונה האחרונה שנשמרה.

4. העתיקו את התמונות החדשות מכרטיס ה- SD לספריה החדשה שנוצרה.

זה לוקח לא יותר מדקה, אך קל יותר לבצע את התהליך על ידי הכנסת הכרטיס בלבד.

אני צריך להשתמש בכרטיס מכיוון שאני לא יכול להעביר את התמונות ישירות מהמצלמה באמצעות USB, מכיוון שאין מנהלי התקנים עבור לינוקס (כמו שקורה תמיד ...)

פתרון:

צור סקריפט 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. פתח את ספריה המכילה את התמונות החדשות עם מנהל הקבצים.

בהמשך אני מראה לך את התסריט עם הערות שמסבירות איך זה עובד. אני מבהיר שאני לא מתכנת וזה גרם לי לכאבי ראש מספר עד שקיבלתי את זה לעבודה, במיוחד כשהייתי צריך לסנן את השמות לולאת "עבור".

#! / bin / bash ### --- אמת אם SD מונח --- ### SD = / media / KODAK / DCIM / 100Z8612 אם [[-d $ SD]]; ואז ### --- צור ספריה --- ### # קרא את ספריית התמונות וצור עוד עם שם התאריך הנוכחי וההרשאות 755 אם הוא לא קיים. cd ~ / תמונות / kodak ULTDIR = `ls -1 | tail -n1 `# הספריה האחרונה ברשימה. DATE = `תאריך +% y.% M.% D` # תאריך נוכחי בפורמט YY.MM.DD אם [" $ LASTDIR "! =" $ DATE "]; ואז mkdir -vm 755` תאריך +% 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 | חתוך -c1-3,5-8 '# ראה את התמונה האחרונה עם השם xxx_XXXX.eee .eee = סיומת הקובץ (JPG או MOV) # כדי להבטיח שהתסריט יעבוד לאחר מילויו: # 100_9999.eee -> 101_0000. eee ואין שגיאות # CUT כך שיהיה בפורמט xxxXXXX ### --- העבר למאגר הרשימה האחרון --- ### # או לאחרונה נוצר, אם נוצר # cd .. ULTDIR = `ls -1 | הזנב -n1` # חוזר שוב כי אחרת זה לוקח את ה- ULTDIR הקודם של אם 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] `### - - השווה קבצים חדשים עם שם גדול יותר מאשר לאחרונה --- ### עבור אני ב- $ FILTER עושה N = `הד $ I | חתך -c1-3,5-8` # שם חתך אם [["$ ULTIMG" -lt "$ N"]]; ואז cp $ I ~ / תמונות / kodak / $ ULTDIR fi נעשה thunar ~ / תמונות / kodak / $ ULTDIR # פתח את הספריה החדשה עם Thunar אחר יציאה 0 fi יציאה 0

לבסוף כדי שזה יעבוד, הוספתי אותו ליישום "כוננים ומדיה נשלפים" של Xfce בתפריט

הגדרות → מנהל ההגדרות Xfce 4 → כוננים ומדיה נשלפים → מצלמות

באמצעות אפשרות התמונה לייבא. כשאני מכניס את הכרטיס, תיבת דו-שיח שואלת אם אני רוצה לייבא את התמונות. עם קבלתו, התסריט מבוצע.

ובכן זהו זה. סליחה על הבלגנות של הטקסט, זה ההודעה הראשונה שלי ואני לא יודע איך לטעון את התסריט בעת עריכתו. אני מקווה שזה שימושי למישהו לפחות שיהיה לו רעיון ולהתאים אותו לכל מקרה מסוים.

לא קיבלתי רישיון מכיוון שלא הודעתי לעצמי היטב על כל גרסה של ה- GPL, אך הם רשאים להעתיק ולשנות אותה. ואל תהססו לומר כיצד ניתן לשפר אותו או שיש דרכים אחרות לעשות את אותו הדבר, אך קל יותר.

השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   Percaff_TI99 דיג'ו

    מעניין מאוד חואקין, רעיון טוב הוא להעלות את התסריט להדביק שם קל יותר לשתף את הקוד, וכפי שאתה אומר ניתן להתאים אותו לצרכים אחרים ולומדים להשתמש בבאש קצת יותר.

    ברכות!

    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.   מנוטי דיג'ו

    ואתה לא יודע מהיר להוריד תמונות מהיר? אני חושב שזה עושה את כל זה ועוד.

    1.    מר בלאק דיג'ו

      העניין הוא שהבחור הצנום עשה את זה בעצמו, הוא היה נהנה אני מניח וזה יכול לשרת מישהו אחר

    2.    חואקין דיג'ו

      היי. לא ידעתי את זה וזה נראה טוב ממה שראיתי באינטרנט, אבל למעשה התסריט ממלא באופן מושלם את מה שאני צריך; כלומר להכניס את הכרטיס ולהעתיק את כל הקבצים באופן אוטומטי.

      זה גם עזר לי ללמוד קצת יותר כי ברור שזה לא עבד בפעם הראשונה; טעויות התרחשו והרבה לומדים מהם.

      לא חשבתי להראות את התסריט כדי לפתור את הבעיות לאחרים, יש יישומים כמו אלה שאתה מזכיר שהם כלליים יותר. שיתפתי את זה בשבילך לקרוא וכנקודת התייחסות ליצירת דברים חדשים תוך שימוש בלולאות (במקרה זה "עבור") וביטויים רגולריים (משתנים "ULTIMG" ו- "FILTER" בתסריט)

  4.   קוד קוד דיג'ו

    זה נראה שימושי, אני שומר את זה למקרה שאצטרך את זה יום אחד. תודה.

    1.    חואקין דיג'ו

      תודה!

  5.   ללא שם דיג'ו

    אבל בשביל זה כבר יש לנו grsync

    1.    חואקין דיג'ו

      כן, אבל אני חושב ש- rsync משמש יותר לגיבויים. מעולם לא הסתכלתי על זה אבל זו יישום שעלינו לקחת בחשבון וללמוד מכולנו.

      לא ידעתי שיש ממשק גרפי ל- rsync.

  6.   חדשני דיג'ו

    וואו, אני מוצא את הקוד מאוד מעניין, מאוד שימושי. תמשיך עם זה. 😀
    אני אשמור את זה למקרה שאזדקק לזה.

    ברכות.

    1.    חואקין דיג'ו

      תודה!.