Skrip Bash: salin gambar baru dari SD ke PC

Kadang-kadang kita perlu melakukan tugas berulang pada PC kita, yang dari masa ke masa menjadi membosankan. Dalam kes-kes tertentu kita dapat meringankan pekerjaan kita dengan menggunakan skrip yang sesuai untuk kita.

Hari ini saya menulis untuk menunjukkan skrip bash yang menyelesaikan keperluan: salin gambar baru dari kamera digital saya dari kad SD ke PC.

keadaan:

Setiap kali saya mempunyai gambar baru untuk dimuat turun ke komputer saya, saya akan melakukan perkara berikut:

1. Buka direktori di mana saya mempunyai gambar yang diklasifikasikan dalam sub-direktori.

2. Buat sub-direktori baru dengan nama tarikh semasa, dalam format yy.mm.dd

3. Pindah ke sub-direktori yang dibuat sebelumnya dan lihat gambar terakhir yang disimpan.

4. Salin gambar baru dari kad SD ke direktori yang baru dibuat.

Proses ini tidak lebih dari satu minit, tetapi prosesnya lebih mudah dilakukan dengan hanya memasukkan kad.

Saya harus menggunakan kad itu kerana saya tidak dapat memindahkan gambar secara langsung dari kamera melalui USB, kerana tidak ada pemacu untuk Linux (seperti biasa terjadi ...)

penyelesaian:

Buat skrip bash yang melakukan perkara berikut:

1. Sahkan semasa permulaan jika kad SD dipasang. Jika tidak ia berakhir.

2. Pergi ke direktori utama gambar dan cari yang terakhir. Simpan nama anda dalam pemboleh ubah.

3. Bandingkan tarikh semasa dengan direktori terakhir, jika berlainan, buat direktori baru dengan nama tarikh semasa dalam format "yy.mm.dd".

4. Pindah ke direktori terakhir (bukan yang baru, tetapi yang lebih lama) dan simpan dalam pemboleh ubah nama fail terakhir yang dipindahkan sebelumnya.

Dalam langkah ini adalah perlu untuk menyaring nama fail untuk dapat membandingkannya dengan fail baru pada kad dalam masa terdekat. Fail mempunyai format berikut: xxx_xxxx.eee Di mana: x = digit 0 hingga 9 dan eee = peluasan (JPG, MOV). Contohnya: 100_5684.JPG, 100_5699.MOV. Selepas penapis, nama kekal xxxxxxx Oleh itu, dalam contoh di atas, kita akan mempunyai: 1005684, 1005699.

Oleh kerana direktori dapat berisi jenis file lain atau dengan nama yang diubah, filter digunakan.

5. Pindah ke kad dan tapis fail seperti pada titik sebelumnya.

6. Bandingkan fail pada kad dengan pemboleh ubah yang mengandungi fail terakhir yang dipindahkan sebelumnya (titik 4) dan salin fail yang dinamakan ke dalam direktori yang baru dibuat lebih besar daripada pemboleh ubah. (kerana nama hanya nombor).

7. Buka direktori yang mengandungi gambar baru dengan pengurus fail.

Seterusnya saya menunjukkan skrip dengan komen yang menerangkan bagaimana ia berfungsi. Saya menjelaskan bahawa saya bukan pengaturcara dan ini membuat saya sakit kepala sehingga saya berjaya, terutamanya ketika saya harus menyaring nama untuk gelung "untuk".

#! / bin / bash ### --- PENGESAHAN JIKA SD SD DIPEROLEHI --- ### SD = / media / KODAK / DCIM / 100Z8612 jika [[-d $ SD]]; kemudian ### --- BUAT DIREKTORI --- ### #Baca direktori gambar dan buat yang lain dengan nama # tarikh dan kebenaran 755 semasa jika tidak ada. cd ~ / Gambar / kodak ULTDIR = `ls -1 | tail -n1` # direktori terakhir dalam senarai. TARIKH = `tarikh +% y.% M.% D` #Tarikh semasa dalam format YY.MM.DD jika [" $ LASTDIR "! =" $ DATE "]; maka mkdir -vm 755`date +% y.% m.% d` # buat direktori dengan tarikh semasa fi ### --- LIHAT FILE TERAKHIR $ ULTDIR --- ### cd $ ULTDIR ULTIMG = `ls - 1 [0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] | ekor -n1 | potong -c1-3,5-8` # lihat gambar terakhir dengan nama xxx_XXXX.eee .eee = peluasan fail (JPG atau MOV) # Untuk memastikan bahawa skrip berfungsi setelah terpenuhi: # 100_9999.eee - > 101_0000.eee dan tidak ada ralat # CUT sehingga ia dalam format xxxXXXX ### --- Pindah KE ARAH DAFTAR TERAKHIR --- ### # ATAU TERBARU DILAKUKAN, JIKA # cd DIBUAT .. ULTDIR = `ls -1 | tail -n1` # berjalan lagi kerana jika tidak, ia memerlukan ULTDIR sebelumnya dari if cd / media / KODAK / DCIM / 100Z8612 ### --- FILTER fail dalam SD --- ### FILTER = `ls -1 [0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] `### - - BANDINGKAN FILI BARU DENGAN NAMA YANG LEBIH BESAR DARI LAST --- ### untuk I dalam $ FILTER do N = `gema $ I | potong -c1-3,5-8` #Cut nama jika [["$ ULTIMG" -lt "$ N"]]; kemudian cp $ I ~ / Gambar / kodak / $ ULTDIR fi selesai thunar ~ / Gambar / kodak / $ ULTDIR # Buka direktori baru dengan jalan keluar Thunar lain 0 pintu keluar 0

Akhirnya untuk membuatnya berfungsi, saya menambahkannya ke aplikasi "Pemacu yang Boleh Dilepas dan Media" Xfce di menu

Tetapan → Pengurus Tetapan Xfce 4 → Pemacu dan Media yang Boleh Dilepaskan → Kamera

menggunakan pilihan gambar import. Semasa saya memasukkan kad, kotak dialog bertanya sama ada saya mahu mengimport gambar. Setelah menerima, skrip dilaksanakan.

Baik itu sahaja. Maaf kerana kekacauan teksnya, ini adalah catatan pertama saya dan saya tidak tahu bagaimana menjadualkan skrip ketika menyuntingnya. Saya harap bermanfaat bagi seseorang sekurang-kurangnya untuk mempunyai idea dan menyesuaikannya dengan setiap kes tertentu.

Saya tidak memberi lesen kerana saya belum memberi tahu diri saya tentang setiap versi GPL, tetapi mereka bebas menyalin dan mengubahnya. Jangan ragu untuk mengatakan bagaimana ia dapat diperbaiki atau jika ada cara lain untuk melakukan perkara yang sama, tetapi lebih mudah.

Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

  1.   Percaff_TI99 kata

    Joaquín yang sangat menarik, idea yang baik adalah memuat naik skrip di tampal di mana lebih mudah untuk berkongsi kodnya, dan seperti yang anda katakan ia dapat disesuaikan dengan keperluan lain dan seseorang belajar menggunakan bash sedikit lagi.

    Salam!

    1.    Joaquin kata

      Selesai, tambah dalam http://paste.desdelinux.net/4737
      Terima kasih!

  2.   vr_rv kata

    Semasa menyalin foto yang sudah ada di direktori, itu tidak menunjukkan bahawa sudah ada satu dan memberi anda pilihan untuk menggantinya atau tidak menyalinnya?

    Bagaimanapun ia sangat berguna, kerana ia melakukan semuanya secara automatik

    1.    Joaquin kata

      Hai. Ia sebenarnya tidak menyalin gambar berulang, tetapi hanya mengabaikannya. Ideanya tepat untuk menyalin fail baru tanpa memerlukan interaksi pengguna. Juga, melainkan jika anda menambahkan gambar lebih dari sekali sehari, skrip akan menyalin fail baru ke direktori baru. Saya menerangkan secara ringkas:

      Hari ini adalah 10/03/13, saya membuat direktori bernama 13.03.10/100/4440 dan menyalin beberapa gambar atau video (MOV) di dalamnya: 100_4441.JPG, 100_4442.JPG, 100_4445.MOV, XNUMX_XNUMX.JPG
      (4443 dan 4444 yang hilang dihapus dengan kamera, yang terakhir adalah 4445).

      Kemudian andaikan saya menggunakan skrip pada 01/04/13 dan mempunyai gambar baru di kad. Skrip membuat direktori bernama 13.04.01 dan di dalam gambar / video baru yang namanya lebih besar daripada "4445"; kerana membaca direktori 13.03.10 dan gambar terakhir adalah 100_4445.JPG. Sekiranya saya menjalankan semula skrip dengan gambar baru dari kad pada hari yang sama, ia akan ditambahkan ke direktori 13.04.01. Tiada yang ditimpa.

      Saya harap saya telah menjelaskan idea saya sedikit 🙂

  3.   Manuti kata

    Dan anda tidak tahu Rapid Photo Downloader? Saya fikir ia melakukan semua itu dan banyak lagi.

    1.    Encik Black kata

      Maksudnya adalah bahawa lelaki kurus melakukannya sendiri, dia akan bersenang-senang saya kira dan ia dapat melayani orang lain

    2.    Joaquin kata

      Hai. Saya tidak mengetahuinya dan nampaknya bagus dari apa yang saya lihat di internet, tetapi sebenarnya skrip memenuhi dengan sempurna apa yang saya perlukan; iaitu memasukkan kad dan semua fail disalin secara automatik.

      Ini juga membantu saya belajar lebih banyak kerana jelas ia tidak berfungsi pada kali pertama; Kesalahan berlaku dan banyak yang dapat dipelajari dari mereka.

      Saya tidak bermaksud menunjukkan skrip untuk menyelesaikan masalah bagi orang lain, ada aplikasi seperti yang anda nyatakan yang lebih umum. Saya kongsikan untuk anda baca dan sebagai rujukan untuk membuat perkara baru yang menggunakan gelung (dalam kes ini "untuk") dan ungkapan biasa (pemboleh ubah "ULTIMG" dan "FILTER" dalam skrip)

  4.   codelab kata

    Nampaknya berguna, saya menyimpannya sekiranya saya memerlukannya suatu hari nanti. Terima kasih.

    1.    Joaquin kata

      Terima kasih!

  5.   tanpa nama kata

    tetapi untuk itu kita sudah mempunyai grsync

    1.    Joaquin kata

      Ya, tapi saya rasa rsync lebih banyak digunakan untuk sandaran. Saya tidak pernah melihatnya tetapi ia adalah aplikasi yang harus kita pertimbangkan dan belajar dari kita semua.

      Saya tidak tahu ada antara muka grafik untuk rsync.

  6.   orang baru terakhir kata

    Wow, saya dapati kodnya sangat menarik, sangat berguna. teruskan. 😀
    Saya akan menyimpannya sekiranya saya memerlukannya.

    Greetings.

    1.    Joaquin kata

      Terima kasih!.