スクリプトバッシュ: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=/media/KODAK/DCIM/100Z8612 if [[ -d $SD ]]; 次に ### --- CREATE DIRECTORY --- ### #画像ディレクトリを読み取り、現在の #日付の名前と権限 755 を使用して別のディレクトリを作成します (存在しない場合)。 cd ~/Images/kodak ULTDIR=`ls -1 | tail -n1` # リストされた最後のディレクトリ。 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エラーはありません # xxxXXXX 形式に切り取ります ### --- リストされた最後のディレクトリに移動 --- ### # または、作成された場合は最近作成されたディレクトリ # cd .. LASTDIR= `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]` ### -- - 新しいファイルを比較最後より大きい名前 --- ### for I in $FILTER do N=`echo $I | Cut -c1-3,5-8` #名前をカット if [[ "$ULTIMG" -lt "$N" ]]; then cp $I ~/Images/kodak/$ULTDIR fi 完了 thunar ~/Images/kodak/$ULTDIR #Thunar で新しいディレクトリを開きます else exit 0 fi exit 0

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

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

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

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

GPL のすべてのバージョンについて十分に理解していないため、ライセンスを付与しませんでしたが、自由にコピーしたり変更したりすることはできます。 また、どのように改善できるか、同じことをもっと簡単に行う別の方法があるかどうか、遠慮なく言ってください。