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. Отворете директорията, съдържаща новите изображения, с файловия мениджър.

По-долу ви показвам скрипта с коментари, които обясняват как работи. Пояснявам, че не съм програмист и това ме боли няколко пъти, докато го накарам да работи, особено когато трябваше да филтрирам имената за цикъла "за".

#! / bin / bash ### --- ПРОВЕРЯТЕ АКО Е SD МОНТИРАН --- --- ### SD = / media / KODAK / DCIM / 100Z8612 ако [[-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 | cut -c1-3,5-8` # вижте последното изображение с име xxx_XXXX.eee .eee = разширение на файла (JPG или MOV) # За да сте сигурни, че скриптът работи след изпълнението му: # 100_9999.eee -> 101_0000. eee и няма грешки # CUT, така че да е във формата 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] `### - - СРАВНЕТЕ НОВИ ФАЙЛОВЕ С ИМЕ ПО-ГОЛЯМО ПОСЛЕДНО --- ### за 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. каза той

    Много интересно Joaquín, добра идея е да качите скрипта в пастата, където е по-лесно да споделите кода и както казвате, той може да бъде адаптиран към други нужди и човек се научава да използва 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.    Хоакин каза той

      Здравей Не го знаех и изглежда добре от това, което видях в интернет, но всъщност скриптът перфектно изпълнява това, от което се нуждая; което е да поставите картата и автоматично да копирате всички файлове.

      Също така ми помогна да науча малко повече, защото очевидно не се получи за първи път; Възникнаха грешки и много се научи от тях.

      Не мислех да показвам скрипта за решаване на проблемите на други, има приложения като споменатите от вас, които са по-общи. Споделих го, за да го прочетете и като справка за създаване на нови неща, използвайки цикли (в случая "за") и регулярни изрази (променливи "ULTIMG" и "FILTER" в скрипта)

  4.   кодова лаборатория каза той

    Изглежда полезно, пазя го, в случай че някой ден ми потрябва. Благодаря ти.

    1.    Хоакин каза той

      Благодаря ви!

  5.   без име каза той

    но за това вече имаме grsync

    1.    Хоакин каза той

      Да, но мисля, че rsync се използва повече за архивиране. Никога не съм го разглеждал, но това е приложение, което трябва да вземем предвид и да се учим от всички нас.

      Не знаех, че има графичен интерфейс за rsync.

  6.   последен новобранец каза той

    Леле, намирам кода за много интересен, много полезен. продължавай така. 😀
    Ще го запазя, в случай че имам нужда.

    Поздрави.

    1.    Хоакин каза той

      Благодаря ти!.