Иногда нам нужно выполнять повторяющиеся задачи на нашем ПК, которые со временем становятся утомительными. В некоторых случаях мы можем облегчить нашу работу, используя сценарии, которые работают на нас.
Сегодня я пишу, чтобы показать вам сценарий bash, который решает задачу: копировать новые изображения с моей цифровой камеры с SD-карты на ПК.
ситуация:
Каждый раз, когда мне нужно было загрузить новые изображения на свой компьютер, я делал следующее:
1. Откройте каталог, в котором у меня есть изображения, классифицированные по подкаталогам.
2. Создайте новый подкаталог с названием текущей даты в формате гг.мм.дд.
3. Перейдите в подкаталог, созданный в предыдущий раз, и посмотрите, какое изображение было сохранено последним.
4. Скопируйте новые изображения с SD-карты во вновь созданный каталог.
Это займет не более минуты, но проще выполнить процесс, просто вставив карту.
решение:
Создайте сценарий 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 → Съемные диски и носители → Камеры
используя опцию импорта изображения. Когда я вставляю карту, появляется диалоговое окно с вопросом, хочу ли я импортировать изображения. При принятии скрипт выполняется.
Ну вот и все. Извините за беспорядок в тексте, это мой первый пост, и я не знаю, как табулировать сценарий при его редактировании. Надеюсь, кому-то будет полезно хотя бы иметь представление и адаптировать ее к каждому конкретному случаю.
Очень интересно, Хоакин, хорошая идея - загрузить скрипт в пасте, где будет легче поделиться кодом, и, как вы говорите, его можно адаптировать для других нужд, и можно научиться использовать bash немного больше.
Привет!
Готово, добавлено http://paste.desdelinux.net/4737
Спасибо!
При копировании фотографии, которая уже находится в каталоге, это не означает, что она уже есть, и дает вам возможность заменить ее или не копировать?
В любом случае это очень полезно, так как все делает автоматически
Привет. На самом деле он не копирует повторяющиеся изображения, он просто игнорирует их. Идея заключалась именно в том, чтобы скопировать новые файлы без необходимости взаимодействия с пользователем. Кроме того, если вы не добавляете изображения чаще одного раза в день, сценарий копирует новые файлы в новый каталог. Объясняю кратко:
Сегодня 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. Ни один не перезаписывается.
Надеюсь, я немного прояснил свою идею 🙂
А вы не знаете Rapid Photo Downloader? Я думаю, что он делает все это и даже больше.
Дело в том, что худощавый мужик сделал это сам, я думаю, он бы повеселился и может пригодиться кому-то другому.
Привет. Я не знал этого, и это кажется хорошим из того, что я видел в Интернете, но на самом деле сценарий отлично выполняет то, что мне нужно; который заключается в том, чтобы вставить карту и автоматически скопировать все файлы.
Это также помогло мне узнать немного больше, потому что, очевидно, это не сработало с первого раза; Произошли ошибки, и вы многому на них учитесь.
Я не собирался показывать сценарий для решения проблем другим, есть приложения, подобные упомянутым вами, которые носят более общий характер. Я поделился им, чтобы вы прочитали и как справочник для создания новых вещей с использованием циклов (в данном случае «для») и регулярных выражений (переменные «ULTIMG» и «FILTER» в скрипте)
Это кажется полезным, я сохраняю его на случай, если когда-нибудь понадобится. Спасибо.
Спасибо!
но для этого у нас уже есть grsync
Да, но я думаю, что rsync больше используется для резервного копирования. Я никогда не смотрел на это, но это приложение, которое мы должны принять во внимание и учиться у всех нас.
Я не знал, что для rsync есть графический интерфейс.
Вау, я считаю код очень интересным, очень полезным. Так держать. 😀
Я сохраню его на случай, если он мне понадобится.
Привет.
Спасибо!.