Script Bash: salin gambar baru dari SD ke PC

Terkadang kami perlu melakukan tugas berulang pada PC kami, yang lama-kelamaan menjadi membosankan. Dalam kasus tertentu kita dapat meringankan pekerjaan kita dengan menggunakan skrip yang sesuai untuk kita.

Hari ini saya menulis untuk menunjukkan kepada Anda skrip bash yang menyelesaikan suatu kebutuhan: salin gambar baru dari kamera digital saya dari kartu SD ke PC.

Lokasi:

Setiap kali saya memiliki gambar baru untuk diunduh ke komputer saya, saya akan melakukan hal berikut:

1. Buka direktori tempat saya memiliki gambar yang diklasifikasikan dalam sub-direktori.

2. Buat sub-direktori baru dengan nama tanggal sekarang, dalam format yy.mm.dd

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

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

Ini tidak lebih dari satu menit, tetapi prosesnya lebih mudah dilakukan hanya dengan memasukkan kartu.

Saya harus menggunakan kartu karena saya tidak bisa langsung mentransfer gambar dari kamera melalui USB, karena tidak ada driver untuk Linux (seperti yang selalu terjadi…)

solusi:

Buat skrip bash yang melakukan hal berikut:

1. Verifikasi saat startup apakah kartu SD sudah terpasang. Jika tidak, itu akan berakhir.

2. Buka direktori utama gambar dan temukan yang terakhir. Simpan nama Anda dalam variabel.

3. Bandingkan tanggal sekarang dengan direktori terakhir, jika berbeda, buat direktori baru dengan nama tanggal sekarang dalam format "yy.mm.dd".

4. Pindah ke direktori terakhir (bukan yang baru, tapi yang lebih lama) dan simpan dalam variabel nama file terakhir yang ditransfer sebelumnya.

Pada langkah ini, Anda perlu memfilter nama file agar dapat dibandingkan dengan file baru di kartu dalam waktu dekat. File-file tersebut memiliki format berikut: xxx_xxxx.ee Dimana: x = digit 0 sampai 9 dan eee = ekstensi (JPG, MOV). Misalnya: 100_5684.JPG, 100_5699.MOV. Setelah filter, namanya tetap xxxxxxx Oleh karena itu, pada contoh di atas, kita akan memiliki: 1005684, 1005699.

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

5. Pindah ke kartu dan filter file seperti pada poin sebelumnya.

6. Bandingkan file pada kartu dengan variabel yang berisi file terakhir yang ditransfer waktu sebelumnya (poin 4) dan salin file bernama ke direktori yang baru dibuat lebih besar dari variabel. (karena nama hanyalah angka).

7. Buka direktori yang berisi gambar baru dengan file manager.

Di bawah ini saya menunjukkan kepada Anda skrip dengan komentar yang menjelaskan cara kerjanya. Saya mengklarifikasi bahwa saya bukan seorang programmer dan itu membuat saya pusing beberapa kali sampai saya berhasil, terutama ketika saya harus memfilter nama untuk loop "for".

#! / bin / bash ### --- VERIFIKASI JIKA SD DIPASANG --- ### SD = / media / KODAK / DCIM / 100Z8612 if [[-d $ SD]]; lalu ### --- BUAT DIRECTORY --- ### #Baca direktori gambar dan buat yang lain dengan nama tanggal # saat ini dan izin 755 jika tidak ada. cd ~ / Gambar / kodak ULTDIR = `ls -1 | tail -n1` # direktori terakhir dalam daftar. DATE = `date +% y.% M.% D` #Tanggal saat ini dalam format YY.MM.DD jika [" $ LASTDIR "! =" $ DATE "]; lalu mkdir -vm 755`date +% y.% m.% d` # buat direktori dengan tanggal sekarang 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 | cut -c1-3,5-8` # lihat gambar terakhir dengan nama xxx_XXXX.eee .eee = ekstensi file (JPG atau MOV) # Untuk memastikan script bekerja setelah terpenuhi: # 100_9999.eee -> 101_0000. eee dan tidak ada kesalahan # CUT sehingga dalam format xxxXXXX ### --- PINDAHKAN KE DIREKSI TERAKHIR DAFTAR --- ### # ATAU YANG BARU DIBUAT, JIKA # cd DIBUAT .. ULTDIR = `ls -1 | tail -n1` # berjalan lagi karena jika tidak dibutuhkan ULTDIR sebelumnya dari if cd / media / KODAK / DCIM / 100Z8612 ### --- FILTER file di SD --- ### FILTER = `ls -1 [ 0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] `### - - BANDINGKAN FILE BARU DENGAN NAMA YANG LEBIH BESAR --- ### untuk I di $ FILTER do N = `echo $ I | potong -c1-3,5-8` #Potong nama jika [["$ ULTIMG" -lt "$ N"]]; lalu cp $ I ~ / Pictures / kodak / $ ULTDIR fi selesai thunar ~ / Pictures / kodak / $ ULTDIR #Buka direktori baru dengan Thunar lain keluar 0 fi keluar 0

Akhirnya untuk membuatnya bekerja, saya menambahkannya ke aplikasi "Removable Drives and Media" Xfce di menu

Pengaturan → Manajer Pengaturan Xfce 4 → Drive dan Media yang Dapat Dilepas → Kamera

menggunakan opsi gambar impor. Saat saya memasukkan kartu, kotak dialog menanyakan apakah saya ingin mengimpor gambar. Saat menerima, skrip dijalankan.

Nah itu dia. Maaf untuk teks yang berantakan, ini adalah posting pertama saya dan saya tidak tahu cara mentabulasi skrip saat mengeditnya. Saya berharap berguna bagi seseorang setidaknya untuk memiliki ide dan menyesuaikannya dengan setiap kasus tertentu.

Saya tidak melisensikan karena saya belum memberi tahu diri saya sendiri tentang setiap versi GPL, tetapi mereka bebas menyalin dan memodifikasinya. Dan jangan ragu untuk mengatakan bagaimana hal itu dapat ditingkatkan atau jika ada cara lain untuk melakukan hal yang sama, tetapi lebih mudah.

tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   Percaff_TI99 dijo

    Joaquín yang sangat menarik, ide yang bagus adalah mengunggah skrip dalam bentuk tempel di mana lebih mudah untuk berbagi kode, dan seperti yang Anda katakan, itu dapat disesuaikan dengan kebutuhan lain dan belajar menggunakan bash sedikit lagi.

    Salam!

    1.    Joaquin dijo

      Selesai, ditambahkan http://paste.desdelinux.net/4737
      Gracias!

  2.   vr_rv dijo

    Saat menyalin foto yang sudah ada di direktori, itu tidak menunjukkan bahwa sudah ada dan memberi Anda pilihan untuk menggantinya atau tidak?

    Bagaimanapun ini sangat berguna, karena ia melakukan semuanya secara otomatis

    1.    Joaquin dijo

      Hai. Itu tidak benar-benar menyalin gambar yang berulang, itu hanya mengabaikannya. Idenya justru untuk menyalin file baru tanpa perlu interaksi pengguna. Selain itu, kecuali Anda menambahkan gambar lebih dari sekali sehari, skrip menyalin file baru ke direktori baru. Saya menjelaskan secara singkat:

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

      Misalkan saya menggunakan script pada 01/04/13 dan memiliki gambar baru di kartu. Skrip membuat direktori bernama 13.04.01 dan di dalam gambar / video baru yang namanya lebih besar dari "4445"; karena membaca direktori 13.03.10 dan gambar terakhir adalah 100_4445.JPG. Jika saya menjalankan kembali skrip dengan gambar kartu baru pada hari yang sama, gambar tersebut akan ditambahkan ke direktori 13.04.01. Tidak ada yang ditimpa.

      Saya harap saya sedikit mengklarifikasi ide saya 🙂

  3.   manuti dijo

    Dan Anda tidak tahu Rapid Photo Downloader? Saya pikir itu melakukan semua itu dan banyak lagi.

    1.    tuan hitam dijo

      Masalahnya adalah bahwa pria kurus melakukannya sendiri, dia akan bersenang-senang, saya kira dan itu dapat melayani orang lain

    2.    Joaquin dijo

      Hai. Saya tidak mengetahuinya dan sepertinya bagus dari apa yang saya lihat di internet, tetapi sebenarnya naskah itu dengan sempurna memenuhi apa yang saya butuhkan; yaitu memasukkan kartu dan semua file disalin secara otomatis.

      Itu juga membantu saya untuk belajar lebih banyak karena jelas itu tidak berhasil pertama kali; Kesalahan terjadi dan banyak yang dipelajari darinya.

      Saya tidak bermaksud menunjukkan skrip untuk memecahkan masalah bagi orang lain, ada aplikasi seperti yang Anda sebutkan yang lebih umum. Saya membagikannya untuk Anda baca dan sebagai referensi untuk membuat hal-hal baru dengan menggunakan loop (dalam hal ini "untuk") dan ekspresi reguler (variabel "ULTIMG" dan "FILTER" di skrip)

  4.   lab kode dijo

    Sepertinya berguna, saya menyimpannya kalau-kalau saya membutuhkannya suatu hari nanti. Terima kasih.

    1.    Joaquin dijo

      Gracias!

  5.   tidak terkenal dijo

    tapi untuk itu kami sudah memiliki grsync

    1.    Joaquin dijo

      Ya, tapi menurut saya rsync lebih banyak digunakan untuk backup. Saya tidak pernah melihatnya tetapi ini adalah aplikasi yang harus kita pertimbangkan dan pelajari dari kita semua.

      Saya tidak tahu ada antarmuka grafis untuk rsync.

  6.   newnewbie dijo

    Wow, menurut saya kodenya sangat menarik, sangat berguna. teruskan. 😀
    Saya akan menyimpannya jika saya membutuhkannya.

    Salam.

    1.    Joaquin dijo

      Terima kasih!.