Script Bash : SD에서 PC로 새 이미지 복사

때때로 우리는 시간이 지날수록 지루 해지는 PC에서 반복적 인 작업을 수행해야합니다. 어떤 경우에는 우리에게 적합한 스크립트를 사용하여 작업을 쉽게 할 수 있습니다.

오늘 저는 필요를 해결 한 bash 스크립트를 보여 드리고자합니다. 디지털 카메라의 새 이미지를 SD 카드에서 PC로 복사하는 것입니다.

상태:

컴퓨터에 새 이미지를 다운로드 할 때마다 다음을 수행합니다.

1. 하위 디렉터리로 분류 된 이미지가있는 디렉터리를 엽니 다.

2. yy.mm.dd 형식으로 현재 날짜의 이름으로 새 하위 디렉토리를 만듭니다.

3. 이전에 생성 한 하위 디렉토리로 이동하여 마지막으로 저장 한 이미지를 확인합니다.

4. SD 카드에서 새로 만든 디렉토리로 새 이미지를 복사합니다.

XNUMX 분 이상 걸리지 않지만 카드를 삽입하기 만하면 프로세스가 더 쉽습니다.

Linux 용 드라이버가 없기 때문에 USB를 통해 카메라에서 이미지를 직접 전송할 수 없기 때문에 카드를 사용해야합니다 (항상 그렇듯이…)

솔루션 :

다음을 수행하는 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. 파일 관리자로 새 이미지가 포함 된 디렉토리를 엽니 다.

다음으로 작동 방식을 설명하는 주석과 함께 스크립트를 보여줍니다. 나는 프로그래머가 아니라는 것을 분명히했고, 그것이 작동 할 때까지, 특히 "for"루프의 이름을 필터링해야 할 때까지 몇 가지 골칫거리가됐다.

#! / bin / bash ### --- SD가 마운트되었는지 확인 --- ### SD = / 미디어 / KODAK / DCIM / 100Z8612 if [[-d $ SD]]; then ### --- CREATE DIRECTORY --- ### # 이미지의 디렉토리를 읽고 # 현재 날짜의 이름과 755 권한이없는 경우 다른 이름을 만듭니다. cd ~ / 그림 / kodak ULTDIR =`ls -1 | tail -n1` # 목록의 마지막 디렉토리. DATE =`date + % y. % M. % D` # YY.MM.DD 형식의 현재 날짜 if [ "$ LASTDIR"! = "$ DATE"]; then 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가 생성 된 경우 .. LAST =`ls -1 | tail -n1` # 그렇지 않으면 if cd / media / KODAK / DCIM / 100Z8612의 이전 ULTDIR을 사용하므로 다시 실행됩니다. ### --- SD의 파일 필터링 --- ### FILTER =`ls -1 [ 0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV]`###- -이름이 마지막보다 큰 새 파일 비교 --- ### in $ FILTER do N =`echo $ I | cut -c1-3,5-8` # 컷 이름 if [[ "$ ULTIMG"-lt "$ N"]]; then cp $ I ~ / Pictures / kodak / $ ULTDIR fi done thunar ~ / Pictures / kodak / $ ULTDIR #Thunar로 새 디렉토리 열기 else exit 0 fi exit 0

마지막으로 작동하기 위해 메뉴에있는 Xfce의 "이동식 드라이브 및 미디어"응용 프로그램에 추가했습니다.

설정 → Xfce 4 설정 관리자 → 이동식 드라이브 및 미디어 → 카메라

이미지 가져 오기 옵션을 사용합니다. 카드를 삽입하면 이미지를 가져올 것인지 묻는 대화 상자가 나타납니다. 수락하면 스크립트가 실행됩니다.

그게 다야. 텍스트가 지저분해서 죄송합니다. 첫 번째 게시물이고 편집 할 때 스크립트를 표로 만드는 방법을 모르겠습니다. 적어도 누군가가 아이디어를 가지고 각 특정 사례에 적용하는 것이 유용하기를 바랍니다.

GPL의 각 버전에 대해 잘 알지 못했기 때문에 라이선스를 취득하지 않았지만 자유롭게 복사하고 수정할 수 있습니다. 그리고 어떻게 개선 할 수 있는지 또는 동일하지만 더 쉽게 할 수있는 다른 방법이 있는지 자유롭게 말씀해주십시오.

13 코멘트, 당신의 것을 남겨주세요

코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   퍼카프_TI99

    매우 흥미로운 Joaquín, 좋은 생각은 코드를 공유하기 쉬운 곳에 스크립트를 붙여 넣는 것입니다. 다른 필요에 맞게 조정할 수 있고 bash를 조금 더 사용하는 방법을 배웁니다.

    안녕하십니까!

    1.    호아킨

      완료, 추가됨 http://paste.desdelinux.net/4737
      당신을 감사하십시오!

  2.   vr_rv

    이미 디렉토리에있는 사진을 복사 할 때 이미 사진이 있음을 나타내지 않고 교체하거나 복사하지 않는 옵션을 제공합니까?

    어쨌든 그것은 모든 것을 자동으로하기 때문에 매우 유용합니다.

    1.    호아킨

      안녕. 실제로 반복되는 이미지를 복사하지 않고 무시합니다. 아이디어는 사용자 상호 작용없이 새 파일을 정확하게 복사하는 것이 었습니다. 또한 이미지를 하루에 두 번 이상 추가하지 않는 한 스크립트는 새 파일을 새 디렉토리에 복사합니다. 간단히 설명합니다.

      오늘은 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 디렉토리를 읽고 마지막 이미지는 100_4445.JPG이기 때문입니다. 같은 날 카드에서 새 이미지로 스크립트를 다시 실행하면 13.04.01 디렉토리에 추가됩니다. 덮어 쓰지 않습니다.

      내 아이디어를 조금 명확히했으면 좋겠다 🙂

  3.   마누 티

    그리고 Rapid Photo Downloader를 모르십니까? 나는 그것이 그 모든 것 이상을한다고 생각한다.

    1.    미스터 블랙

      요점은 마른 남자가 스스로 해냈고, 그는 재미있을 것 같고 다른 사람에게 봉사 할 수 있다는 것입니다.

    2.    호아킨

      안녕. 나는 그것을 몰랐고 내가 인터넷에서 본 것에서 좋은 것처럼 보이지만 실제로는 스크립트가 내가 필요한 것을 완벽하게 충족시킵니다. 카드를 삽입하고 모든 파일을 자동으로 복사하는 것입니다.

      그것은 또한 분명히 처음에는 작동하지 않았기 때문에 제가 조금 더 배우는 데 도움이되었습니다. 실수가 발생했고 그로부터 많은 것을 배웠습니다.

      나는 다른 사람들에게 문제를 해결하기 위해 스크립트를 보여줄 것이라고 생각하지 않았으며, 당신이 언급 한 것과 같은 더 일반적인 응용 프로그램이 있습니다. 루프 (이 경우에는 "for")와 정규식 (스크립트에서 변수 "ULTIMG"및 "FILTER")을 사용하여 새로운 것을 작성하기위한 참조 및 읽을 수 있도록 공유했습니다.

  4.   코드 랩

    유용 해 보이지만 언젠가 필요할 때를 대비해 보관합니다. 감사합니다.

    1.    호아킨

      당신을 감사하십시오!

  5.   명명되지 않은

    하지만이를 위해 이미 grsync가 있습니다.

    1.    호아킨

      예,하지만 rsync가 백업에 더 많이 사용되는 것 같습니다. 나는 그것을 본 적이 없지만 우리 모두에게 고려하고 배워야 할 응용 프로그램입니다.

      rsync 용 그래픽 인터페이스가 있는지 몰랐습니다.

  6.   마지막 새내기

    와, 코드가 매우 흥미롭고 유용하다고 생각합니다. 그것을 유지하십시오. 😀
    필요할 때를 대비해 보관하겠습니다.

    인사말.

    1.    호아킨

      감사합니다!.