Понякога трябва да изпълняваме повтарящи се задачи на нашия компютър, които с времето стават досадни. В определени случаи можем да улесним работата си, като използваме скриптове, които работят за нас.
Днес пиша, за да ви покажа bash скрипт, който е решил една нужда: копирайте нови изображения от моя цифров фотоапарат от SD карта на компютъра.
ситуация:
Всеки път, когато имах нови изображения за изтегляне на компютъра си, правех следното:
1. Отворете директорията, в която имам изображения, класифицирани в поддиректории.
2. Създайте нова поддиректория с името на текущата дата във формат yy.mm.dd
3. Преместете се в поддиректорията, създадена предишния път, и вижте какво е последното запазено изображение.
4. Копирайте новите изображения от SD картата в новосъздадената директория.
Това отнема не повече от минута, но е по-лесно процесът да бъде направен само чрез поставяне на картата.
Решение:
Създайте 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 Диспечер на настройките → Преносими устройства и носители → Камери
като използвате опцията за импортиране на изображение. Когато поставям картата, диалогов прозорец пита дали искам да импортирам изображенията. При приемане скриптът се изпълнява.
Ами това е. Извинете за разхвърляността на текста, това е първата ми публикация и не знам как да таблирам скрипта при редактирането му. Надявам се, че е полезно за някого поне да има идея и да я адаптира към всеки конкретен случай.
Много интересно Joaquín, добра идея е да качите скрипта в пастата, където е по-лесно да споделите кода и както казвате, той може да бъде адаптиран към други нужди и човек се научава да използва bash малко повече.
Поздрави!
Готово, добавено в http://paste.desdelinux.net/4737
Благодаря ви!
Когато копирате снимка, която вече е в директорията, това не означава, че вече има такава и ви дава възможност да я замените или да не я копирате?
Във всеки случай е много полезно, тъй като прави всичко автоматично
Здравей Всъщност не копира повтарящи се изображения, а просто ги игнорира. Идеята беше точно да се копират новите файлове, без да е необходимо взаимодействие с потребителя. Освен това, освен ако не добавяте изображения повече от веднъж на ден, скриптът копира новите файлове в нова директория. Обяснявам накратко:
Днес е 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. Никой не е заменен.
Надявам се да съм изяснил малко идеята си 🙂
И не познавате Rapid Photo Downloader? Мисля, че прави всичко това и много повече.
Въпросът е, че кльощавият мъж го направи сам, би се забавлявал, предполагам и може да служи на някой друг
Здравей Не го знаех и изглежда добре от това, което видях в интернет, но всъщност скриптът перфектно изпълнява това, от което се нуждая; което е да поставите картата и автоматично да копирате всички файлове.
Също така ми помогна да науча малко повече, защото очевидно не се получи за първи път; Възникнаха грешки и много се научи от тях.
Не мислех да показвам скрипта за решаване на проблемите на други, има приложения като споменатите от вас, които са по-общи. Споделих го, за да го прочетете и като справка за създаване на нови неща, използвайки цикли (в случая "за") и регулярни изрази (променливи "ULTIMG" и "FILTER" в скрипта)
Изглежда полезно, пазя го, в случай че някой ден ми потрябва. Благодаря ти.
Благодаря ви!
но за това вече имаме grsync
Да, но мисля, че rsync се използва повече за архивиране. Никога не съм го разглеждал, но това е приложение, което трябва да вземем предвид и да се учим от всички нас.
Не знаех, че има графичен интерфейс за rsync.
Леле, намирам кода за много интересен, много полезен. продължавай така. 😀
Ще го запазя, в случай че имам нужда.
Поздрави.
Благодаря ти!.