Script bash: yeni görüntüleri SD'den PC'ye kopyalayın

Bazen bilgisayarımızda zamanla sıkıcı hale gelen tekrarlayan görevleri yerine getirmemiz gerekir. Bazı durumlarda, işimize yarayan komut dosyalarını kullanarak işimizi kolaylaştırabiliriz.

Bugün size bir ihtiyacı çözen bir bash betiği göstermek için yazıyorum: dijital kameramdan yeni görüntüleri bir SD karttan bilgisayara kopyalayın.

Yer:

Bilgisayarıma indirecek yeni resimlerim olduğu her seferinde şunları yapardım:

1. Görüntüleri alt dizinlerde sınıflandırdığım dizini açın.

2. yy.mm.dd formatında mevcut tarihin adıyla yeni bir alt dizin oluşturun

3. Bir önceki sefer oluşturulan alt dizine gidin ve kaydedilen son görüntünün ne olduğuna bakın.

4. Yeni görüntüleri SD karttan yeni oluşturulan dizine kopyalayın.

Bu bir dakikadan fazla sürmez, ancak işlemin sadece kartı takarak yapılması daha kolaydır.

Kartı kullanmam gerekiyor çünkü Linux sürücüleri olmadığı için (her zaman olduğu gibi…) USB aracılığıyla görüntüleri kameradan doğrudan aktaramıyorum.

çözüm:

Aşağıdakileri yapan bir bash betiği oluşturun:

1. SD kartın takılı olup olmadığını başlangıçta doğrulayın. Aksi takdirde biter.

2. Resimlerin ana dizinine gidin ve sonuncuyu bulun. Adınızı bir değişkene kaydedin.

3. Geçerli tarihi son dizinle karşılaştırın, farklılarsa, geçerli tarihin adı "yy.mm.dd" biçiminde yeni bir dizin oluşturun.

4. Son dizine (yenisine değil, daha eski olanına) gidin ve bir önceki sefer aktarılan son dosyanın adını bir değişkene kaydedin.

Bu adımda, yakın gelecekte karttaki yeni dosyalarla karşılaştırabilmek için dosyanın adını filtrelemek gerekir. Dosyalar aşağıdaki biçime sahiptir: xxx_xxxx.eee Burada: x = 0'dan 9'a rakam ve eee = uzantı (JPG, MOV). Örneğin: 100_5684.JPG, 100_5699.MOV. Filtreden sonra, ad xxxxxxx olarak kalır Bu nedenle, yukarıdaki örnekte 1005684, 1005699'a sahip oluruz.

Dizin başka türde dosyalar veya değiştirilmiş adlar içerebileceğinden, filtre kullanılır.

5. Karta gidin ve önceki noktada olduğu gibi dosyaları filtreleyin.

6. Karttaki dosyaları, önceki sefer aktarılan son dosyayı içeren değişkenle (nokta 4) karşılaştırın ve adlandırılmış dosyaları yeni oluşturulan dizine kopyalayın değişkenden daha büyük. (isimler sadece sayı olduğundan).

7. Yeni görüntüleri içeren dizini dosya yöneticisi ile açın.

Sonra size nasıl çalıştığını açıklayan yorumlarla birlikte senaryoyu göstereceğim. Bir programcı olmadığımı ve özellikle de "for" döngüsü için isimleri filtrelemek zorunda kaldığımda, onu çalıştırana kadar bana birkaç baş ağrısı verdiğini açıklığa kavuşturuyorum.

#! / bin / bash ### --- SD TAKILI İSE DOĞRULAYIN --- ### SD = / media / KODAK / DCIM / 100Z8612 eğer [[-d $ SD]]; sonra ### --- DIRECTORY OLUŞTUR --- ### #Görüntüler dizinini okuyun ve # mevcut tarih adı ve yoksa 755 izinleriyle başka bir tane oluşturun. cd ~ / Resimler / kodak ULTDIR = `ls -1 | tail -n1` # listedeki son dizin. TARİH = `tarih +% y.% M.% D` # YY.MM.DD biçiminde şu anki tarih, eğer [" $ SONDİR "! =" $ TARİH "]; sonra mkdir -vm 755`date +% y.% m.% d` # geçerli tarihle dizin oluştur fi ### --- $ ULTDIR'İN SON DOSYASINI GÖR --- ### cd $ ULTDIR ULTIMG = `ls - 1 [0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] | kuyruk -n1 | cut -c1-3,5-8` # xxx_XXXX.eee adlı son görüntüye bakın .eee = dosya uzantısı (JPG veya MOV) # Komut dosyasının yerine getirildikten sonra çalıştığından emin olmak için: # 100_9999.eee -> 101_0000. eee ve hata yok # CUT böylece xxxXXXX biçiminde olsun ### --- LİSTENİN SON DİZİNİNE GEÇİN --- ### # VEYA SON OLUŞTURULDU, EĞER # cd OLUŞTURULDU .. ULTDIR = `ls -1 | tail -n1` # tekrar gider çünkü aksi takdirde eğer cd / media / KODAK / DCIM / 100Z8612'nin önceki ULTDIR'sini alır ### --- SD'deki dosyaları FİLTRELE --- ### FİLTRE = `ls -1 [ 0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] "### - - YENİ DOSYALARI SONUNDAN BÜYÜK ADIYLA KARŞILAŞTIRIN --- ### $ FILTER içindeki I için N = `echo $ I | kes -c1-3,5-8` # Eğer [["$ ULTIMG" -lt "$ N"]]; sonra cp $ I ~ / Pictures / kodak / $ ULTDIR fi done thunar ~ / Pictures / kodak / $ ULTDIR # Thunar else 0 fi çıkış 0 ile yeni dizini aç

Sonunda onu çalıştırmak için, menüdeki Xfce'nin "Çıkarılabilir Sürücüler ve Medya" uygulamasına ekledim.

Ayarlar → Xfce 4 Ayarlar Yöneticisi → Çıkarılabilir Sürücüler ve Medya → Kameralar

görüntüyü içe aktar seçeneğini kullanarak. Kartı taktığımda, bir iletişim kutusu görüntüleri içe aktarmak isteyip istemediğimi soruyor. Kabul edildikten sonra komut dosyası yürütülür.

İşte bu. Metnin dağınıklığı için özür dilerim, bu benim ilk yazım ve düzenlerken komut dosyasını nasıl tablolaştıracağımı bilmiyorum. Umarım en azından birisi için bir fikre sahip olmak ve onu her bir duruma uyarlamak yararlı olur.

Lisans almadım çünkü GPL'nin her bir sürümü hakkında kendimi iyi bilgilendirmedim, ancak onlar bunu kopyalama ve değiştirme özgürlüğüne sahipler. Ve nasıl geliştirilebileceğini veya aynı şeyi yapmanın başka yolları varsa, ancak daha kolay olduğunu söylemekten çekinmeyin.

Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   Percaff_TI99 dijo

    Çok ilginç Joaquín, iyi bir fikir, betiği kodu paylaşmanın daha kolay olduğu ve sizin de söylediğiniz gibi diğer ihtiyaçlara uyarlanabildiği ve bash kullanmayı biraz daha öğrenen yapıştırın içine yüklemektir.

    Selamlar !!!

    1.    Joaquin dijo

      Bitti, eklendi http://paste.desdelinux.net/4737
      Teşekkürler!

  2.   vr_rv dijo

    Halihazırda dizinde bulunan bir fotoğrafı kopyalarken, zaten bir tane olduğunu göstermez ve size onu değiştirme veya kopyalama seçeneği sunar.

    Her neyse, her şeyi otomatik olarak yaptığı için çok kullanışlı

    1.    Joaquin dijo

      Selam. Aslında yinelenen görüntüleri kopyalamıyor, sadece onları yok sayıyor. Buradaki fikir, yeni dosyaları kullanıcı etkileşimine gerek kalmadan kopyalamaktı. Ayrıca, günde birden fazla görüntü eklemediğiniz sürece, komut dosyası yeni dosyaları yeni bir dizine kopyalar. Kısaca açıklarım:

      Bugün 10/03/13, 13.03.10/100/4440 adlı bir dizin oluşturuyorum ve içine bazı görüntüleri veya videoları (MOV) kopyalıyorum: 100_4441.JPG, 100_4442.JPG, 100_4445.MOV, XNUMX_XNUMX.JPG
      (Kayıp 4443 ve 4444 kamera ile silindi, sonuncusu 4445).

      Öyleyse, komut dosyasını 01/04/13 tarihinde kullandığımı ve kartta yeni resimlerim olduğunu varsayalım. Komut dosyası 13.04.01 adında ve adı "4445" ten büyük olan yeni görüntülerin / videoların içinde bir dizin oluşturur; çünkü 13.03.10 dizinini okur ve son görüntü 100_4445.JPG'dir. Script'i aynı gün karttan yeni resimlerle yeniden çalıştırırsam, 13.04.01 dizinine eklenirler. Hiçbirinin üzerine yazılmaz.

      Umarım fikrimi biraz netleştirmişimdir 🙂

  3.   Manuti dijo

    Ve Rapid Photo Downloader'ı bilmiyor musunuz? Sanırım hepsini ve daha fazlasını yapıyor.

    1.    Bay siyah dijo

      Mesele şu ki, sıska adam bunu kendisi yapardı, sanırım eğlenirdi ve başka birine hizmet edebilir.

    2.    Joaquin dijo

      Selam. Bilmiyordum ve internette gördüğümden iyi görünüyor, ama aslında senaryo ihtiyacım olanı mükemmel bir şekilde karşılıyor; kartın takılması ve tüm dosyaların otomatik olarak kopyalanmasıdır.

      Biraz daha öğrenmeme de yardımcı oldu çünkü açıkçası ilk seferde işe yaramadı; Hatalar meydana geldi ve onlardan çok şey öğrenildi.

      Senaryoyu başkaları için sorunları çözmek için göstermek niyetinde değildim, bahsettiğiniz gibi daha genel uygulamalar var. Döngüler (bu durumda "için") ve normal ifadeler (komut dosyasındaki "ULTIMG" ve "FILTER" değişkenleri) kullanarak yeni şeyler oluşturmak için okumanızı ve referans olarak paylaştım

  4.   kod laboratuvarı dijo

    Yararlı görünüyor, bir gün ihtiyacım olursa diye saklarım. Teşekkür ederim.

    1.    Joaquin dijo

      Teşekkürler!

  5.   isimsiz dijo

    ama bunun için zaten grsync'e sahibiz

    1.    Joaquin dijo

      Evet, ancak rsync'in daha çok yedeklemeler için kullanıldığını düşünüyorum. Hiç bakmadım ama dikkate almamız ve hepimizden öğrenmemiz gereken bir uygulama.

      Rsync için bir grafik arabirim olduğunu bilmiyordum.

  6.   son çaylak dijo

    Vay canına, kodu çok ilginç buluyorum, çok kullanışlı. aynen böyle devam. 😀
    İhtiyacım olursa diye saklayacağım.

    Selamlar.

    1.    Joaquin dijo

      Teşekkür ederim!.