
私は、約 1,000 個の USB フラッシュ ドライブに同じファイルをロードする必要があるイベントで彼女を手伝っています。
これはかなり小さなファイル(わずか数 MB)ですが、面倒なのは実際にファイルをコピーすることです。
USB フラッシュ ドライブを挿入した瞬間にファイルを自動的にコピーする方法はありますか? これがあれば彼女の仕事は非常に簡単になります。
私のデスクトップ OS は Windows 10 ですが、Linux も利用できます。Linux 用の bash スクリプトを書いた方が簡単であれば、それを書くのも構いません。
答え1
Ubuntu 16.04 では USB フラッシュドライブが にマウントされています/media/$USER/LabelName
が、知らないうちにファイルのコピーを処理することが可能です。大まかなスクリプトは次のようになります。
#!/bin/bash
while sleep 1
do [ -e /media/$USER/*/TheFile ] || cp TheFile /media/$USER/*/
umount umount /media/$USER/*
xmessage -center -timeout 3 "File copied - change disc"
done
これは原理を示すためのものです。必要なことの 1 つは、/media/$USER/
開始する前に何もマウントされていないことを確認することです (最初のドライブがすでにマウントされている場合を除く)。TheFile
パラメータまたは事前設定された環境変数に置き換えることができますが、パスがないように現在のディレクトリにあることを確認してください。そうしないと、ドライブにすでに存在しているかどうかのチェックが失敗します。
おそらく、インストールしなくても Ubuntu Live ディスクでこれらすべてを実行できますが、ペンドライブがマウントされている場所を確認し、必要に応じてスクリプトを変更する必要があります。また、xmessage
Live ディスクに が含まれているかどうかはわかりません。そのため、ドライブを変更する必要があることを示す別の方法を使用しない限り、インストールする必要がある可能性があります。
答え2
の延長AFHの基本的な考え方Linux OS がフラッシュドライブを自動的にマウントすると仮定します/media/$USER
。
#! /bin/bash
src="$1"
target="$(basename "$src")"
counter=0
copyTo() {
sleep 0.3 # wait for drive to be fully mounted
printf -v offset '%*s' $(( counter * 15 % ($(tput cols) - 15) ))
echo "$offset Copy to $counter"
cp "$src" "$1/$target"
sync "$1"
umount "$1"
echo "$offset Unmounted $counter"
}
inotifywait -me create --format "%w%f" "/media/$USER" |
while IFS='' read -r drive; do
((++counter))
copyTo "$drive" &
done
使用法
- まだインストールしていない場合はインストールしてください
inotifywait
。Ubuntu ではsudo apt install inotify-tools
インストールするために使用します。 - ファイルマネージャ(例えばnemoやnautilus)を次のように設定します。ないマウントされたドライブを自動的に開きます。
umount
ファイル マネージャー ウィンドウにマウント解除するドライブの内容が表示されている場合は失敗する可能性があります。 - スクリプトを として保存します
autocopy.sh
。 - スクリプトを実行可能にするには、
chmod u+x autocopy.sh
- スクリプトを開始するには
./autocopy.sh '/path/to/file.ext'
- 必要な数の USB フラッシュ ドライブを挿入します。スクリプトは、接続されたドライブを検出し、ファイルをコピーして、ドライブをアンマウントします。
- 完了したら、 を押してCtrlCスクリプトを終了します。
出力
スクリプトは、ファイルがコピーされる前とドライブがアンマウントされた後に出力します。関連するメッセージは同じレベルでインデントされます。
Copy to 1
Unmounted 1
Copy to 2
Copy to 3
Unmounted 3
Unmounted 2
Copy to 4
Unmounted 4
数字は信頼できない可能性があります。同じスティックを 2 回挿入すると、2 回カウントされます。