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, але вони можуть копіювати та змінювати її. І не соромтеся сказати, як це можна вдосконалити, чи є інші способи зробити те саме, але простіше.

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

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

*

*

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

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

    Дуже цікавий Хоакін, гарна ідея - завантажити сценарій у пасту, де легше ділитися кодом, і, як ви говорите, його можна адаптувати до інших потреб, і людина навчиться використовувати bash трохи більше.

    Привіт!

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

      Готово, додано в http://paste.desdelinux.net/4737
      Спасибо!

  2.   вр_рв - сказав він

    Під час копіювання фотографії, яка вже є в каталозі, це не означає, що вона вже є, і надає вам можливість її замінити чи не скопіювати?

    У будь-якому випадку це дуже корисно, оскільки робить все автоматично

    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.   останній новачок - сказав він

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

    Привіт.

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

      Дякую!.