Script Bash: копирование новых изображений с SD на ПК

Иногда нам нужно выполнять повторяющиеся задачи на нашем ПК, которые со временем становятся утомительными. В некоторых случаях мы можем облегчить нашу работу, используя сценарии, которые работают на нас.

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

ситуация:

Каждый раз, когда мне нужно было загрузить новые изображения на свой компьютер, я делал следующее:

1. Откройте каталог, в котором у меня есть изображения, классифицированные по подкаталогам.

2. Создайте новый подкаталог с названием текущей даты в формате гг.мм.дд.

3. Перейдите в подкаталог, созданный в предыдущий раз, и посмотрите, какое изображение было сохранено последним.

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

Это займет не более минуты, но проще выполнить процесс, просто вставив карту.

Я должен использовать карту, потому что я не могу напрямую передавать изображения с камеры через USB, так как нет драйверов Linux (как всегда бывает…)

решение:

Создайте сценарий bash, который выполняет следующие действия:

1. При запуске проверьте, смонтирована ли SD-карта. В противном случае это заканчивается.

2. Зайдите в основную директорию изображений и найдите последнюю. Сохраните свое имя в переменной.

3. Сравните текущую дату с последней директорией, если они отличаются, создайте новую директорию с названием текущей даты в формате «гг.мм.дд».

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 = `date +% y.% M.% D` # Текущая дата в формате YY.MM.DD if [" $ LASTDIR "! =" $ DATE "]; then 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` # посмотреть последнее изображение с именем xxx_XXXX.eee .eee = расширение файла (JPG или MOV) # Чтобы скрипт работал после его выполнения: # 100_9999.eee - > 101_0000.eee и ошибок нет # ВЫРЕЗАТЬ, чтобы он был в формате xxxXXXX ### --- ПЕРЕЙТИ В ПОСЛЕДНЮЮ КАТАЛОГ СПИСКА --- ### # ИЛИ НЕДАВНО СОЗДАННЫЙ, ЕСЛИ # cd был СОЗДАН .. ПОСЛЕД = `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] `### - - СРАВНИТЕ НОВЫЕ ФАЙЛЫ С ИМЯМИ БОЛЕЕ ПОСЛЕДНЕГО --- ### for I в $ FILTER do N = `echo $ I | cut -c1-3,5-8` # Вырезать имя if [["$ ULTIMG" -lt "$ N"]]; then cp $ I ~ / Pictures / kodak / $ ULTDIR fi done thunar ~ / Pictures / kodak / $ ULTDIR # Открыть новый каталог с помощью Thunar else exit 0 fi exit 0

Наконец, чтобы заставить его работать, я добавил его в приложение Xfce «Съемные диски и мультимедиа» в меню.

Настройки → Диспетчер настроек Xfce 4 → Съемные диски и носители → Камеры

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

Ну вот и все. Извините за беспорядок в тексте, это мой первый пост, и я не знаю, как табулировать сценарий при его редактировании. Надеюсь, кому-то будет полезно хотя бы иметь представление и адаптировать ее к каждому конкретному случаю.

Я не лицензировал, потому что я плохо осведомлен о каждой версии GPL, но они могут копировать и изменять ее. И не стесняйтесь говорить, как это можно было бы улучшить или есть другие способы сделать то же самое, но более легкое.

13 комментариев, оставьте свой

Оставьте свой комментарий

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

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.

  1.   Перкафф_TI99 сказал

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

    Привет!

    1.    Хоакин сказал

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

  2.   vr_rv сказал

    При копировании фотографии, которая уже находится в каталоге, это не означает, что она уже есть, и дает вам возможность заменить ее или не копировать?

    В любом случае это очень полезно, так как все делает автоматически

    1.    Хоакин сказал

      Привет. На самом деле он не копирует повторяющиеся изображения, он просто игнорирует их. Идея заключалась именно в том, чтобы скопировать новые файлы без необходимости взаимодействия с пользователем. Кроме того, если вы не добавляете изображения чаще одного раза в день, сценарий копирует новые файлы в новый каталог. Объясняю кратко:

      Сегодня 10, я создаю каталог под названием 03/13/13.03.10 и копирую несколько изображений или видео (MOV) внутрь: 100_4440.JPG, 100_4441.JPG, 100_4442.MOV, 100_4445.JPG
      (пропавшие 4443 и 4444 стерлись камерой, последняя 4445).

      Тогда предположим, что я использую сценарий от 01 и у меня на карте есть новые изображения. Скрипт создает каталог с именем 04 и внутри новых изображений / видео, имя которого больше "13"; потому что он читает каталог 13.04.01, а последнее изображение - 4445_13.03.10.JPG. Если в тот же день я перезапущу сценарий с новыми изображениями с карты, они будут добавлены в каталог 100. Ни один не перезаписывается.

      Надеюсь, я немного прояснил свою идею 🙂

  3.   Манути сказал

    А вы не знаете Rapid Photo Downloader? Я думаю, что он делает все это и даже больше.

    1.    Г-н Черный сказал

      Дело в том, что худощавый мужик сделал это сам, я думаю, он бы повеселился и может пригодиться кому-то другому.

    2.    Хоакин сказал

      Привет. Я не знал этого, и это кажется хорошим из того, что я видел в Интернете, но на самом деле сценарий отлично выполняет то, что мне нужно; который заключается в том, чтобы вставить карту и автоматически скопировать все файлы.

      Это также помогло мне узнать немного больше, потому что, очевидно, это не сработало с первого раза; Произошли ошибки, и вы многому на них учитесь.

      Я не собирался показывать сценарий для решения проблем другим, есть приложения, подобные упомянутым вами, которые носят более общий характер. Я поделился им, чтобы вы прочитали и как справочник для создания новых вещей с использованием циклов (в данном случае «для») и регулярных выражений (переменные «ULTIMG» и «FILTER» в скрипте)

  4.   Codelab сказал

    Это кажется полезным, я сохраняю его на случай, если когда-нибудь понадобится. Спасибо.

    1.    Хоакин сказал

      Спасибо!

  5.   неименная сказал

    но для этого у нас уже есть grsync

    1.    Хоакин сказал

      Да, но я думаю, что rsync больше используется для резервного копирования. Я никогда не смотрел на это, но это приложение, которое мы должны принять во внимание и учиться у всех нас.

      Я не знал, что для rsync есть графический интерфейс.

  6.   последний новичок сказал

    Вау, я считаю код очень интересным, очень полезным. Так держать. 😀
    Я сохраню его на случай, если он мне понадобится.

    Привет.

    1.    Хоакин сказал

      Спасибо!.