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, но они могут копировать и изменять ее. И не стесняйтесь говорить, как это можно было бы улучшить или есть другие способы сделать то же самое, но более легкое.