Script Bash: копіюйте нові зображення з SD на ПК

Іноді нам потрібно виконувати повторювані завдання на нашому ПК, які з часом стають нудними. У деяких випадках ми можемо полегшити нам роботу, використовуючи сценарії, які працюють для нас.

Сьогодні я пишу, щоб показати вам скрипт bash, який вирішив необхідність: скопіюйте нові зображення з моєї цифрової камери з SD-карти на ПК.

Розташування:

Кожного разу, коли мені потрібно було завантажувати нові зображення на комп’ютер, я робив наступне:

1. Відкрийте каталог, де зображення розміщені в підкаталогах.

2. Створіть новий підкаталог із назвою поточної дати у форматі yy.mm.dd

3. Перейдіть до підкаталогу, створеного попереднього разу, і подивіться, яке останнє збережене зображення.

4. Скопіюйте нові зображення з SD-карти у щойно створений каталог.

Це займає не більше хвилини, але процес простіше зробити, просто вставивши картку.

Мені доводиться користуватися картою, оскільки я не можу безпосередньо передавати зображення з камери через USB, оскільки для Linux немає драйверів (як це завжди буває ...)

рішення:

Створіть скрипт bash, який робить наступне:

1. Під час запуску перевірте, чи встановлена ​​SD-карта. Інакше це закінчується.

2. Перейдіть до головного каталогу зображень і знайдіть останній. Збережіть своє ім'я у змінній.

3. Порівняйте поточну дату з останньою, якщо вони різняться, створіть нову директорію з назвою поточної дати у форматі "yy.mm.dd".

4. Перейдіть до останнього каталогу (не нового, а старішого) і збережіть у змінній ім'я останнього файлу, переданого попереднього разу.

На цьому кроці необхідно відфільтрувати ім'я файлу, щоб найближчим часом порівняти його з новими файлами на картці. Файли мають такий формат: ххх_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 | вирізати -c1-3,5-8` # див. останнє зображення з ім'ям xxx_XXXX.eee .eee = розширення файлу (JPG або MOV) # Щоб переконатися, що сценарій працює після його виконання: # 100_9999.eee -> 101_0000. eee, і помилок не буде `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] `### - - ПОРІВНЯЙТЕ НОВІ ФАЙЛИ З ІМ'ЯМ БІЛЬШИМ, ніж ОСТАННІМ --- ### для I у $ FILTER do N = `echo $ I | вирізати -c1-3,5-8` # Вирізати назву, якщо [["$ ULTIMG" -lt "$ N"]]; потім cp $ I ~ / Pictures / kodak / $ ULTDIR fi done thunar ~ / Pictures / kodak / $ ULTDIR # Відкрийте новий каталог за допомогою Thunar else вихід 0 fi вихід 0

Нарешті, щоб він працював, я додав його до програми «Знімні диски та носії» Xfce в меню

Налаштування → Диспетчер налаштувань Xfce 4 → Знімні накопичувачі та носії → Камери

за допомогою опції імпорту зображення. Коли я вставляю картку, діалогове вікно запитує, чи хочу я імпортувати зображення. Після прийняття сценарій виконується.

Ну ось і все. Вибачте за безладність тексту, це мій перший допис, і я не знаю, як скласти скрипт під час редагування. Я сподіваюся, комусь корисно хоча б мати ідею та адаптувати її до кожного конкретного випадку.

Я не видав ліцензію, оскільки я не повідомив себе добре про кожну версію GPL, але вони можуть копіювати та змінювати її. І не соромтеся сказати, як це можна вдосконалити, чи є інші способи зробити те саме, але простіше.

Зміст статті відповідає нашим принципам редакційна етика. Щоб повідомити про помилку, натисніть тут.

13 коментарі, залиште свій

Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

  1.   Percaff_TI99 - сказав він

    Дуже цікавий Хоакін, гарна ідея - завантажити сценарій у пасту, де легше ділитися кодом, і, як ви говорите, його можна адаптувати до інших потреб, і людина навчиться використовувати 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.JPG. Якщо я повторюю сценарій із новими зображеннями з картки того ж дня, вони додаються до каталогу 100. Жоден не перезаписаний.

      Сподіваюся, я трохи прояснив свою ідею 🙂

  3.   Мануті - сказав він

    А ви не знаєте Rapid Photo Downloader? Я думаю, що це робить все це та багато іншого.

    1.    Містер Блек - сказав він

      Справа в тому, що худий чоловік зробив це сам, мабуть, йому було б весело, і це може служити комусь іншому

    2.    Хоакін - сказав він

      Привіт. Я цього не знав, і це здається добре з того, що я бачив в Інтернеті, але насправді сценарій чудово виконує те, що мені потрібно; тобто вставити картку та автоматично скопіювати всі файли.

      Це також допомогло мені дізнатися трохи більше, тому що, очевидно, це не спрацювало з першого разу; Сталися помилки, і з них можна багато чому навчитися.

      Я не мав наміру показувати сценарій для вирішення проблем для інших, є такі програми, як ті, про які ви згадали, які є більш загальними. Я поділився ним, щоб ви його прочитали, і як посилання на створення нових речей, використовуючи цикли (у даному випадку "for") та регулярні вирази (змінні "ULTIMG" та "FILTER" у сценарії)

  4.   codelab - сказав він

    Це здається корисним, я зберігаю його на випадок, якщо одного дня мені це знадобиться. Дякую.

    1.    Хоакін - сказав він

      Спасибо!

  5.   без назви - сказав він

    але для цього ми вже маємо grsync

    1.    Хоакін - сказав він

      Так, але я думаю, що rsync використовується більше для резервних копій. Я ніколи на це не дивився, але це програма, яку ми повинні взяти до уваги і навчитися у всіх нас.

      Я не знав, що існує графічний інтерфейс для rsync.

  6.   lastnewbie - сказав він

    Ого, я вважаю код дуже цікавим, дуже корисним. так тримати. 😀
    Я збережу його на випадок, якщо мені це знадобиться.

    Привіт.

    1.    Хоакін - сказав він

      Дякую!.