スクリプトバッシュ:SDからPCに新しい画像をコピーする

PCで繰り返しタスクを実行する必要がある場合がありますが、これは時間の経過とともに面倒になります。 場合によっては、自分に合ったスクリプトを使用することで、作業を簡単にすることができます。

今日は、デジタルカメラからSDカードからPCに新しい画像をコピーするというニーズを解決したbashスクリプトを紹介するために書いています。

状況:

コンピューターにダウンロードする新しい画像があるたびに、次のことを行います。

1.画像がサブディレクトリに分類されているディレクトリを開きます。

2.yy.mm.dd形式で現在の日付の名前で新しいサブディレクトリを作成します

3.前回作成したサブディレクトリに移動し、最後に保存された画像を確認します。

4.新しいイメージをSDカードから新しく作成したディレクトリにコピーします。

これにはXNUMX分もかかりませんが、カードを挿入するだけでプロセスを実行する方が簡単です。

Linuxドライバーがないため、USB経由でカメラから画像を直接転送できないため、カードを使用する必要があります(いつものように…)

解決策:

次のことを行うbashスクリプトを作成します。

1.起動時にSDカードが取り付けられているかどうかを確認します。 それ以外の場合は終了します。

2.画像​​のメインディレクトリに移動し、最後のディレクトリを見つけます。 名前を変数に保存します。

3.現在の日付を最後のディレクトリと比較します。異なる場合は、現在の日付の名前を「yy.mm.dd」形式で使用して新しいディレクトリを作成します。

4.最後のディレクトリ(新しいディレクトリではなく古いディレクトリ)に移動し、前回転送された最後のファイルの名前を変数に保存します。

このステップでは、ファイルの名前をフィルタリングして、近い将来にカード上の新しいファイルと比較できるようにする必要があります。 ファイルの形式は次のとおりです。 XXX_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]]; 次に### --- CREATE DIRECTORY --- ####画像のディレクトリを読み取り、#現在の日付の名前と権限755が存在しない場合は別のディレクトリを作成します。 cd〜 /写真/コダックULTDIR = `ls -1 | tail -n1`#リストの最後のディレクトリ。 DATE = `date +%y。%M.%D`#YY.MM.DD形式の現在の日付if [" $ LASTDIR "!=" $ DATE "]; 次に、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が作成された場合).. ULTDIR = `ls -1 | tail -n1`#それ以外の場合は、if cd / media / KODAK / DCIM / 100Z8612 ### --- SD内のファイルをFILTER --- ### FILTER = `ls -1 [ 0 -9] [0-9] [0-9] _ [0-9] [0-9] [0-9] [0-9]。[JM] [PO] [GV] `###- -新しいファイルを最後よりも大きい名前で比較します--- ### for I in $ FILTER do N = `echo $ I | cut -c1-3,5-8` #Cut name if [["$ ULTIMG" -lt "$ N"]]; 次にcp $ I〜 / Pictures / kodak / $ ULTDIR fi done thunar〜 / Pictures / kodak / $ ULTDIR#Thunarで新しいディレクトリを開きますelse exit 0 fi exit 0

最後にそれを機能させるために、メニューのXfceの「リムーバブルドライブとメディア」アプリケーションに追加しました

設定→Xfce4設定マネージャー→リムーバブルドライブとメディア→カメラ

画像のインポートオプションを使用します。 カードを挿入すると、画像をインポートするかどうかを尋ねるダイアログボックスが表示されます。 受け入れると、スクリプトが実行されます。

それだけです。 テキストが乱雑になって申し訳ありませんが、これは私の最初の投稿であり、編集時にスクリプトを表にする方法がわかりません。 少なくとも誰かがアイデアを持って、それをそれぞれの特定のケースに適応させることが役立つことを願っています。

私はGPLの各バージョンについて十分に知らしていないため、ライセンスを取得しませんでしたが、GPLを自由にコピーして変更することができます。 そして、それをどのように改善できるか、または同じことを行う他の方法があるかどうか、しかしもっと簡単に言ってください。

記事の内容は、次の原則に準拠しています。 編集倫理。 エラーを報告するには、 ここで.

13コメント、あなたのコメントを残してください

コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.   Percaff_TI99

    非常に興味深いJoaquín、コードを共有しやすい場所にスクリプトを貼り付けてアップロードすることをお勧めします。あなたが言うように、他のニーズに適応させることができ、bashの使い方をもう少し学びます。

    ご挨拶!

    1.    ホアキン

      完了、追加 http://paste.desdelinux.net/4737
      ありがとうございます!

  2.   vr_rv

    すでにディレクトリにある写真をコピーする場合、それはすでにあることを示すものではなく、それを置き換えるかコピーしないかを選択できますか?

    とにかくそれはすべてを自動的に行うので非常に便利です

    1.    ホアキン

      こんにちは。 実際には繰り返し画像をコピーするのではなく、無視するだけです。 アイデアは、ユーザーの操作を必要とせずに新しいファイルを正確にコピーすることでした。 また、XNUMX日にXNUMX回以上画像を追加しない限り、スクリプトは新しいファイルを新しいディレクトリにコピーします。 簡単に説明します。

      今日は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.   マヌーティ

    そして、あなたはラピッドフォトダウンローダーを知りませんか? 私はそれがそれ以上のすべてを行うと思います。

    1.    ミスター・ブラック

      やせっぽちの男が自分でやったということです、彼は私が思うに楽しんでいたでしょう、そしてそれは他の誰かに役立つことができます

    2.    ホアキン

      こんにちは。 私はそれを知りませんでした、そしてそれは私がインターネットで見たものからは良さそうです、しかし実際にはスクリプトは私が必要とするものを完全に満たします。 これは、カードを挿入し、すべてのファイルを自動的にコピーすることです。

      明らかに最初はうまくいかなかったので、それは私がもう少し学ぶのにも役立ちました。 間違いが起こり、そこから多くのことを学びました。

      他の人の問題を解決するためのスクリプトを示すつもりはありませんでした。あなたが言及したような、より一般的なアプリケーションがあります。 ループ(この場合は「for」)と通常の式(スクリプト内の変数「ULTIMG」と「FILTER」)を使用して新しいものを作成するための参照として、読んでいただくために共有しました。

  4.   コードラボ

    便利そうです。いつか必要になったときのために保管しています。 ありがとうございました。

    1.    ホアキン

      ありがとうございます!

  5.   名前なし

    しかしそのために私たちはすでにgrsyncを持っています

    1.    ホアキン

      はい。ただし、バックアップにはrsyncがより多く使用されていると思います。 私はそれを見たことがありませんが、それは私たちが考慮に入れて私たち全員から学ぶべきアプリケーションです。

      rsync用のグラフィカルインターフェイスがあることを知りませんでした。

  6.   最後の新人

    うわー、私はコードが非常に興味深く、非常に便利だと思います。 がんばり続ける。 😀
    必要な場合に備えて保管しておきます。

    ご挨拶。

    1.    ホアキン

      ありがとうございました!。