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