Script Bash: kopyahin ang mga bagong imahe mula sa SD patungong PC

Minsan kailangan nating magsagawa ng mga paulit-ulit na gawain sa aming PC, na sa paglaon ng panahon ay nakakapagod. Sa ilang mga kaso maaari naming mapadali ang aming trabaho sa pamamagitan ng paggamit ng mga script na gumagana para sa amin.

Sumusulat ako ngayon upang ipakita sa iyo ang isang bash script na malutas ang isang pangangailangan: kopyahin ang mga bagong imahe mula sa aking digital camera mula sa isang SD card patungo sa PC.

Sitwasyon:

Sa tuwing mayroon akong mga bagong imahe na mai-download sa aking computer, gagawin ko ang sumusunod:

1. Buksan ang direktoryo kung saan mayroon akong mga imahe na naiuri sa mga sub-direktoryo.

2. Lumikha ng isang bagong sub-direktoryo na may pangalan ng kasalukuyang petsa, sa yy.mm.dd format

3. Lumipat sa sub-direktoryo na nilikha noong nakaraang oras at tingnan kung ano ang huling nai-save na imahe.

4. Kopyahin ang mga bagong imahe mula sa SD card sa bagong nilikha na direktoryo.

Tumatagal ito ng hindi hihigit sa isang minuto, ngunit mas madali para sa proseso na magawa sa pamamagitan lamang ng pagpasok ng card.

Kailangan kong gamitin ang card dahil hindi ko direktang mailipat ang mga imahe mula sa camera sa pamamagitan ng USB, dahil walang mga driver para sa Linux (tulad ng laging nangyayari ...)

Solusyon:

Lumikha ng isang bash script na gumagawa ng mga sumusunod:

1. Patunayan sa pagsisimula kung naka-mount ang SD card. Kung hindi man nagtatapos ito.

2. Pumunta sa pangunahing direktoryo ng mga imahe at hanapin ang huling. I-save ang iyong pangalan sa isang variable.

3. Ihambing ang kasalukuyang petsa sa huling direktoryo, kung magkakaiba sila, lumikha ng isang bagong direktoryo na may pangalan ng kasalukuyang petsa sa format na "yy.mm.dd".

4. Lumipat sa huling direktoryo (hindi ang bago, ngunit isang mas matanda) at i-save sa isang variable ang pangalan ng huling file na inilipat sa nakaraang oras.

Sa hakbang na ito kinakailangan upang salain ang pangalan ng file upang maihambing ito sa mga bagong file sa card sa malapit na hinaharap. Ang mga file ay may sumusunod na format: xxx_xxxx.eee Kung saan: x = digit 0 hanggang 9 at eee = extension (JPG, MOV). Halimbawa: 100_5684.JPG, 100_5699.MOV. Matapos ang filter, ang pangalan ay mananatiling xxxxxxx Samakatuwid, sa halimbawa sa itaas, magkakaroon kami ng: 1005684, 1005699.

Dahil ang direktoryo ay maaaring maglaman ng iba pang mga uri ng mga file o may binago na mga pangalan, ginagamit ang filter.

5. Lumipat sa card at i-filter ang mga file tulad ng sa nakaraang punto.

6. Ihambing ang mga file sa card sa variable na naglalaman ng huling file na inilipat sa nakaraang oras (point 4) at kopyahin ang mga pinangalanang file sa bagong nilikha na direktoryo mas malaki kaysa sa variable. (dahil ang mga pangalan ay numero lamang).

7. Buksan ang direktoryo na naglalaman ng mga bagong imahe kasama ang file manager.

Susunod ay ipinapakita ko sa iyo ang script na may mga puna na nagpapaliwanag kung paano ito gumagana. Nilinaw ko na hindi ako isang programmer at binigyan ako nito ng maraming sakit ng ulo hanggang sa magawa ko ito, lalo na kapag kailangan kong salain ang mga pangalan para sa loop na "para".

#! / bin / bash ### --- VERIFY IF SD IS MOUNTED --- ### SD = / media / KODAK / DCIM / 100Z8612 if [[-d $ SD]]; pagkatapos ### --- GUMAWA NG DIREKTORYA --- ### # Basahin ang direktoryo ng mga imahe at lumikha ng isa pa na may pangalan ng # kasalukuyang petsa at mga pahintulot na 755 kung wala ito. cd ~ / Mga Larawan / kodak ULTDIR = `ls -1 | buntot -n1` # huling direktoryo sa listahan. DATE = `date +% y.% M.% D` #Kasalukuyang petsa sa format na YY.MM.DD kung [" $ LASTDIR "! =" $ DATE "]; pagkatapos mkdir -vm 755`date +% y.% m.% d` # lumikha ng direktoryo na may kasalukuyang petsa fi ### --- TINGNAN ANG HULING FILE NG $ ULTDIR --- ### cd $ ULTDIR ULTIMG = `ls - 1 [0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] | buntot -n1 | gupit -c1-3,5-8` # tingnan ang huling imahe na may pangalang xxx_XXXX.eee .eee = file extension (JPG o MOV) # Upang matiyak na gumagana ang script pagkatapos na ito ay natupad: # 100_9999.eee - > 101_0000.eee at walang mga pagkakamali # CUT upang ito ay nasa format na xxxXXXX ### --- LUMIPON SA HULING DIREKTORYA NG LIST --- --- # O ANG KATAPANG NILIKHA, KUNG # cd ay nilikha .. HULI = `ls -1 | buntot -n1` # napupunta muli dahil kung hindi man tumatagal ang nakaraang ULTDIR ng kung cd / media / KODAK / DCIM / 100Z8612 ### --- Saringan ang mga file sa SD --- ### FILTER = `ls -1 [0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] `### - - MAGKumpara ng BAGONG mga file na may PANGALAN na mas mahusay kaysa sa huling --- ### para sa ako sa $ FILTER gawin N = `echo $ I | gupitin -c1-3,5-8` #Gupitin ang pangalan kung [["$ ULTIMG" -lt "$ N"]]; pagkatapos ay ang cp $ I ~ / Mga Larawan / kodak / $ ULTDIR ay tapos nang thunar ~ / Mga Larawan / kodak / $ ULTDIR #Buksan ang bagong direktoryo gamit ang Thunar na iba pa ang exit 0 fi exit 0

Sa wakas upang magawa itong gumana, idinagdag ko ito sa application na "Naaalis na Mga Drive at Media" ni Xfce sa menu

Mga setting → Manager ng Mga setting ng Xfce 4 → Mga Naaalis na Drive at Media → Mga Camera

gamit ang pagpipilian ng pag-import ng imahe. Kapag naipasok ko ang card, isang dialog box ang nagtanong kung nais kong mag-import ng mga imahe. Sa pagtanggap, ang script ay naisakatuparan.

Kaya ayun. Paumanhin sa kaguluhan ng teksto, ito ang aking unang post at hindi ko alam kung paano i-tabulate ang script kapag ini-edit ito. Inaasahan kong kapaki-pakinabang ito sa isang tao kahit papaano na magkaroon ng isang ideya at iakma ito sa bawat partikular na kaso.

Hindi ako naglisensya sapagkat hindi ko nababatid nang mabuti ang aking sarili tungkol sa bawat bersyon ng GPL, ngunit may kalayaan sila na kopyahin at baguhin ito. At huwag mag-atubiling sabihin kung paano ito maaaring mapabuti o kung may iba pang mga paraan upang gawin ang pareho, ngunit mas madali.

Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   Percaff_TI99 dijo

    Tunay na kagiliw-giliw na Joaquín, isang magandang ideya ay i-upload ang script sa i-paste kung saan mas madaling ibahagi ang code, at tulad ng sinabi mong maaari itong maiakma sa ibang mga pangangailangan at natutunan na gumamit ng bash nang kaunti pa.

    Pagbati!

    1.    Joaquin dijo

      Tapos na, idinagdag sa http://paste.desdelinux.net/4737
      Salamat sa iyo!

  2.   vr_rv dijo

    Kapag kumokopya ng isang litrato na nasa direktoryo na, hindi nito ipahiwatig na mayroon na at bibigyan ka ng pagpipilian na palitan ito o hindi kopyahin ito?

    Gayunpaman ito ay napaka kapaki-pakinabang, dahil awtomatiko nitong ginagawa ang lahat

    1.    Joaquin dijo

      Hi Hindi talaga nito kinokopya ang mga umuulit na imahe, hindi lamang ito pinapansin. Ang ideya ay tiyak na makopya ang mga bagong file nang hindi kinakailangan ng pakikipag-ugnay ng gumagamit. Gayundin, maliban kung magdagdag ka ng mga imahe nang higit sa isang beses sa isang araw, kopya ng script ang mga bagong file sa isang bagong direktoryo. Ipinaliwanag ko nang maikli:

      Ngayon ay 10/03/13, lumikha ako ng isang direktoryo na tinatawag na 13.03.10/100/4440 at kinopya ang ilang mga imahe o video (MOV) sa loob: 100_4441.JPG, 100_4442.JPG, 100_4445.MOV, XNUMX_XNUMX.JPG
      (Ang nawawalang 4443 at 4444 ay binura gamit ang kamera, ang huli ay 4445).

      Pagkatapos ay ipagpalagay na gumagamit ako ng script sa 01/04/13 at may mga bagong imahe sa card. Lumilikha ang script ng isang direktoryo na tinatawag na 13.04.01 at sa loob ng mga bagong imahe / video na ang pangalan ay mas malaki sa "4445"; sapagkat binabasa nito ang direktoryo 13.03.10 at ang huling imahe ay 100_4445.JPG. Kung tatakbo ko ulit ang script ng mga bagong imahe mula sa card sa parehong araw, idinagdag ang mga ito sa direktoryo ng 13.04.01. Wala ay na-o-overtake.

      Sana nilinaw ko nang kaunti ang aking ideya 🙂

  3.   Manuti dijo

    At hindi mo alam ang Rapid Photo Downloader? Sa palagay ko ginagawa ang lahat ng iyon at higit pa.

    1.    Mr itim dijo

      Ang punto ay ang payat na lalaki ang gumawa ng kanyang sarili, magsisiyahan siya sa palagay ko at maaari itong maglingkod sa iba

    2.    Joaquin dijo

      Hi Hindi ko alam ito at mukhang maganda sa nakita ko sa internet, ngunit sa totoo lang perpektong natutupad ng script ang kailangan ko; na kung saan ay upang ipasok ang card at awtomatikong makopya ang lahat ng mga file.

      Nakatulong din ito sa akin upang matuto nang kaunti pa dahil malinaw naman na hindi ito gumana sa unang pagkakataon; Nagkaroon ng mga pagkakamali at maraming natutunan mula sa kanila.

      Hindi ko nilayon na ipakita ang script upang malutas ang mga problema para sa iba, may mga application tulad ng iyong binanggit na mas pangkalahatan. Ibinahagi ko ito para mabasa mo at bilang isang sanggunian upang lumikha ng mga bagong bagay na gumagamit ng mga loop (sa kasong ito "para") at regular na mga expression (variable na "ULTIMG" at "FILTER" sa script)

  4.   codelab dijo

    Mukhang kapaki-pakinabang, itinatago ko ito kung sakaling kailanganin ko ito balang araw. Salamat.

    1.    Joaquin dijo

      Salamat sa iyo!

  5.   hindi pinangalanan dijo

    pero para doon meron na tayong grsync

    1.    Joaquin dijo

      Oo, ngunit sa palagay ko ang rsync ay ginagamit ng higit pa para sa mga pag-backup. Hindi ko pa ito tiningnan ngunit ito ay isang application na dapat nating isaalang-alang at matuto mula sa ating lahat.

      Hindi ko alam na mayroong isang graphic na interface para sa rsync.

  6.   lastnewbie dijo

    Wow, nakikita ko ang code na napaka-interesante, napaka-kapaki-pakinabang. panatilihin ito 😀
    Itatago ko ito kung sakaling kailangan ko ito.

    Pagbati.

    1.    Joaquin dijo

      Salamat!.