Script Bash: sao chép hình ảnh mới từ SD sang PC

Đôi khi chúng ta cần thực hiện các tác vụ lặp đi lặp lại trên PC, điều này theo thời gian sẽ trở nên tẻ nhạt. Trong một số trường hợp, chúng tôi có thể giảm bớt công việc của mình bằng cách sử dụng các tập lệnh phù hợp với chúng tôi.

Hôm nay tôi viết thư này để giới thiệu cho bạn một kịch bản bash giải quyết được nhu cầu: sao chép hình ảnh mới từ máy ảnh kỹ thuật số của tôi từ thẻ SD sang PC.

Tình hình:

Mỗi khi tôi có hình ảnh mới để tải xuống máy tính của mình, tôi sẽ làm như sau:

1. Mở thư mục mà tôi có các hình ảnh được phân loại trong các thư mục con.

2. Tạo một thư mục con mới với tên của ngày hiện tại, ở định dạng yy.mm.dd

3. Di chuyển đến thư mục con đã tạo lần trước và xem ảnh cuối cùng được lưu là gì.

4. Sao chép ảnh mới từ thẻ SD vào thư mục mới tạo.

Quá trình này mất không quá một phút, nhưng quá trình này sẽ dễ dàng hơn chỉ bằng cách lắp thẻ vào.

Tôi phải sử dụng thẻ vì tôi không thể truyền trực tiếp hình ảnh từ máy ảnh qua USB, vì không có trình điều khiển cho Linux (như mọi khi…)

Giải pháp:

Tạo một tập lệnh bash thực hiện như sau:

1. Xác minh khi khởi động xem thẻ SD đã được gắn chưa. Nếu không thì nó kết thúc.

2. Đi tới thư mục chính của hình ảnh và tìm cái cuối cùng. Lưu tên của bạn trong một biến.

3. So sánh ngày hiện tại với thư mục cuối cùng, nếu chúng khác nhau, hãy tạo một thư mục mới với tên của ngày hiện tại ở định dạng "yy.mm.dd".

4. Di chuyển đến thư mục cuối cùng (không phải thư mục mới mà là thư mục cũ hơn) và lưu vào một biến tên của tệp cuối cùng đã chuyển lần trước.

Trong bước này, cần lọc tên của tệp để có thể so sánh với các tệp mới trên thẻ trong thời gian sắp tới. Các tệp có định dạng sau: xxx_xxxx.eee Trong đó: x = chữ số 0 đến 9 và eee = phần mở rộng (JPG, MOV). Ví dụ: 100_5684.JPG, 100_5699.MOV. Sau khi bộ lọc, tên vẫn là xxxxxxx Do đó, trong ví dụ trên, chúng ta sẽ có: 1005684, 1005699.

Vì thư mục có thể chứa các loại tệp khác hoặc có tên đã thay đổi, bộ lọc được sử dụng.

5. Di chuyển đến thẻ và lọc các tệp như ở điểm trước.

6. So sánh các tệp trên thẻ với biến chứa tệp cuối cùng được chuyển lần trước (điểm 4) và sao chép các tệp có tên vào thư mục mới tạo lớn hơn biến. (vì tên chỉ là số).

7. Mở thư mục chứa các hình ảnh mới bằng trình quản lý tệp.

Dưới đây, tôi cho bạn xem tập lệnh với các nhận xét giải thích cách hoạt động của nó. Tôi nói rõ rằng tôi không phải là một lập trình viên và điều đó khiến tôi đau đầu cho đến khi tôi bắt đầu hoạt động, đặc biệt là khi tôi phải lọc tên cho vòng lặp "for".

#! / bin / bash ### --- XÁC NHẬN NẾU SD ĐƯỢC MOUNTED --- ### SD = / media / KODAK / DCIM / 100Z8612 if [[-d $ SD]]; sau đó ### --- TẠO THƯ MỤC --- ### # Đọc thư mục hình ảnh và tạo một thư mục khác có tên # ngày hiện tại và quyền 755 nếu nó không tồn tại. cd ~ / Pictures / kodak ULTDIR = `ls -1 | tail -n1` # thư mục cuối cùng trong danh sách. DATE = `date +% y.% M.% D` # Ngày hiện tại ở định dạng YY.MM.DD if [" $ LASTDIR "! =" $ DATE "]; then mkdir -vm 755`date +% y.% m.% d` # tạo thư mục với ngày hiện tại fi ### --- XEM TẬP TIN CUỐI CÙNG CỦA $ ULTDIR --- ### cd $ ULTDIR ULTIMG = `ls - 1 [0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] | đuôi -n1 | cut -c1-3,5-8` # xem hình ảnh cuối cùng với tên xxx_XXXX.eee .eee = phần mở rộng tệp (JPG hoặc MOV) # Để đảm bảo rằng tập lệnh hoạt động sau khi hoàn thành: # 100_9999.eee -> 101_0000. eee và không có lỗi nào # CẮT để nó ở định dạng xxxXXXX ### --- CHUYỂN ĐẾN DANH MỤC CUỐI CÙNG CỦA DANH SÁCH --- ### # HOẶC TẠO GẦN ĐÂY, NẾU # cd được TẠO .. ULTDIR = `ls -1 | tail -n1` # lại tiếp tục bởi vì nếu không nó sẽ lấy ULTDIR trước của if cd / media / KODAK / DCIM / 100Z8612 ### --- FILTER các tệp trong SD --- ### FILTER = `ls -1 [ 0-9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]. [JM] [PO] [GV] `### - - SO SÁNH CÁC BỘ PHIM MỚI CÓ TÊN HƠN HƠN CUỐI CÙNG --- ### for I in $ FILTER do N = `echo $ I | cut -c1-3,5-8` #Cut name if [["$ ULTIMG" -lt "$ N"]]; then cp $ I ~ / Pictures / kodak / $ ULTDIR fi xong thunar ~ / Pictures / kodak / $ ULTDIR #Mở thư mục mới với Thunar else exit 0 fi exit 0

Cuối cùng để làm cho nó hoạt động, tôi đã thêm nó vào ứng dụng "Removable Drives and Media" của Xfce trong menu

Cài đặt → Trình quản lý cài đặt Xfce 4 → Ổ đĩa có thể tháo rời và phương tiện → Máy ảnh

sử dụng tùy chọn nhập hình ảnh. Khi tôi lắp thẻ, một hộp thoại hỏi tôi có muốn nhập hình ảnh hay không. Khi chấp nhận, tập lệnh được thực thi.

Đó là nó. Xin lỗi vì sự lộn xộn của văn bản, đây là bài viết đầu tiên của tôi và tôi không biết cách lập bảng khi chỉnh sửa nó. Tôi hy vọng sẽ hữu ích cho ai đó ít nhất là có ý tưởng và điều chỉnh nó cho phù hợp với từng trường hợp cụ thể.

Tôi đã không cấp phép vì tôi chưa thông báo rõ về từng phiên bản của GPL, nhưng họ có quyền sao chép và sửa đổi nó. Và hãy thoải mái cho biết cách nó có thể được cải thiện hoặc nếu có những cách khác để làm điều tương tự, nhưng dễ dàng hơn.

Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   Percaff_TI99 dijo

    Joaquín rất thú vị, một ý tưởng hay là tải lên tập lệnh ở dạng dán để chia sẻ mã dễ dàng hơn và như bạn nói nó có thể được điều chỉnh cho phù hợp với các nhu cầu khác và người ta học cách sử dụng bash nhiều hơn một chút.

    Chúc mừng!

    1.    Joaquin dijo

      Xong, thêm vào http://paste.desdelinux.net/4737
      Cảm ơn bạn!

  2.   vr_rv dijo

    Khi sao chép một bức ảnh đã có trong thư mục, nó không chỉ ra rằng đã có một bức ảnh và cho bạn tùy chọn để thay thế nó hoặc không sao chép nó?

    Dù sao nó cũng rất hữu ích, vì nó làm mọi thứ tự động

    1.    Joaquin dijo

      Chào. Nó không thực sự sao chép các hình ảnh lặp lại, nó chỉ bỏ qua chúng. Ý tưởng chính xác là sao chép các tệp mới mà không cần sự tương tác của người dùng. Ngoài ra, trừ khi bạn thêm hình ảnh nhiều hơn một lần mỗi ngày, tập lệnh sẽ sao chép các tệp mới vào một thư mục mới. Tôi giải thích ngắn gọn:

      Hôm nay là 10/03/13, tôi tạo một thư mục tên là 13.03.10/100/4440 và sao chép một số hình ảnh hoặc video (MOV) vào bên trong: 100_4441.JPG, 100_4442.JPG, 100_4445.MOV, XNUMX_XNUMX.JPG
      (Số 4443 và 4444 mất tích đã được xóa bằng máy ảnh, cái cuối cùng là 4445).

      Sau đó, giả sử tôi sử dụng tập lệnh vào ngày 01/04/13 và có hình ảnh mới trên thẻ. Tập lệnh tạo một thư mục có tên 13.04.01 và bên trong các hình ảnh / video mới có tên lớn hơn "4445"; vì nó đọc thư mục 13.03.10 và hình ảnh cuối cùng là 100_4445.JPG. Nếu tôi chạy lại tập lệnh với các hình ảnh thẻ mới cùng ngày, chúng sẽ được thêm vào thư mục 13.04.01. Không có cái nào bị ghi đè.

      Tôi hy vọng tôi đã làm rõ ý tưởng của mình một chút 🙂

  3.   Manuti dijo

    Và bạn chưa biết Rapid Photo Downloader? Tôi nghĩ nó làm được tất cả những điều đó và hơn thế nữa.

    1.    Ông Black dijo

      Vấn đề là người đàn ông gầy đã tự làm điều đó, tôi đoán anh ấy sẽ rất vui và nó có thể phục vụ người khác

    2.    Joaquin dijo

      Chào. Tôi không biết nó và nó có vẻ tốt từ những gì tôi thấy trên internet, nhưng thực sự kịch bản đáp ứng hoàn hảo những gì tôi cần; đó là để chèn thẻ và tự động sao chép tất cả các tệp.

      Nó cũng giúp tôi tìm hiểu thêm một chút vì rõ ràng là nó không hoạt động trong lần đầu tiên; Sai lầm đã xảy ra và rất nhiều điều được học hỏi từ họ.

      Tôi không có ý định đưa ra kịch bản để giải quyết vấn đề cho người khác, có những ứng dụng như những gì bạn đề cập là tổng quát hơn. Tôi đã chia sẻ nó để bạn đọc và làm tài liệu tham khảo để tạo những thứ mới bằng cách sử dụng vòng lặp (trong trường hợp này là "for") và biểu thức chính quy (biến "ULTIMG" và "FILTER" trong script)

  4.   phòng thí nghiệm mật mã dijo

    Nó có vẻ hữu ích, tôi giữ nó để đề phòng một ngày nào đó tôi cần. Cảm ơn bạn.

    1.    Joaquin dijo

      Cảm ơn bạn!

  5.   vô danh dijo

    nhưng vì điều đó, chúng tôi đã có grsync

    1.    Joaquin dijo

      Có, nhưng tôi nghĩ rsync được sử dụng nhiều hơn để sao lưu. Tôi chưa bao giờ nhìn vào nó nhưng nó là một ứng dụng mà chúng ta nên xem xét và học hỏi từ mọi người.

      Tôi không biết có giao diện đồ họa cho rsync.

  6.   người mới cuối cùng dijo

    Wow, tôi thấy mã rất thú vị, rất hữu ích. giữ nó lên. 😀
    Tôi sẽ giữ nó trong trường hợp tôi cần.

    Chúc mừng.

    1.    Joaquin dijo

      Cảm ơn bạn!.