
Ich helfe meiner Freundin bei einer Veranstaltung, bei der sie ca. 1.000 USB-Sticks mit der gleichen Datei bespielen muss.
Es handelt sich zwar um eine recht kleine Datei (nur wenige MB), der mühsame Teil ist jedoch das eigentliche Kopieren der Datei.
Gibt es eine Möglichkeit, eine Datei automatisch auf einen USB-Stick zu kopieren, sobald dieser eingesteckt wird? Das würde ihre Arbeit erheblich erleichtern.
Mein Desktop-Betriebssystem ist Windows 10, aber ich habe auch Zugriff auf Linux. Ich hätte sogar nichts dagegen, ein Bash-Skript für Linux zu schreiben, wenn das einfacher wäre.
Antwort1
Unter Ubuntu 16.04 ist ein USB-Flash-Laufwerk eingebunden /media/$USER/LabelName
, aber es ist möglich, das Kopieren von Dateien zu übernehmen, ohne es zu wissen. Ein grobes Skript wäre: -
#!/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
Dies dient nur zur Veranschaulichung des Prinzips. Sie müssen sicherstellen, dass /media/$USER/
vor dem Start nichts gemountet ist (es sei denn, Sie haben das erste Laufwerk bereits gemountet). Sie können es TheFile
durch einen Parameter oder eine voreingestellte Umgebungsvariable ersetzen, stellen Sie jedoch sicher, dass es sich in Ihrem aktuellen Verzeichnis befindet, sodass kein Pfad vorhanden ist, da sonst die Überprüfung, ob es bereits auf dem Laufwerk vorhanden ist, fehlschlägt.
Sie können das alles wahrscheinlich auf einer Ubuntu Live-CD tun, ohne es zu installieren, aber Sie müssen prüfen, wo die USB-Sticks eingebunden sind und das Skript bei Bedarf ändern. Außerdem bin ich nicht sicher, ob xmessage
es auf einer Live-CD enthalten ist, also müssen Sie es möglicherweise installieren, es sei denn, Sie verwenden eine andere Methode, um anzuzeigen, dass das Laufwerk gewechselt werden muss.
Antwort2
Eine Erweiterung vonGrundidee der AFH, vorausgesetzt, Ihr Linux-Betriebssystem mountet Flash-Laufwerke automatisch in /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
Verwendung
- Installieren Sie es
inotifywait
, falls Sie es noch nicht getan haben. Unter Ubuntu führen Siesudo apt install inotify-tools
dies durch. - Konfigurieren Sie Ihren Dateimanager (zum Beispiel Nemo oder Nautilus) so, dassnichtGemountete Laufwerke automatisch öffnen.
umount
Kann fehlschlagen, wenn in einem Dateimanagerfenster der Inhalt des zu demountenden Laufwerks angezeigt wird. - Speichern Sie das Skript als
autocopy.sh
. - Machen Sie das Skript ausführbar mit
chmod u+x autocopy.sh
- Starten Sie das Skript mit
./autocopy.sh '/path/to/file.ext'
- Schließen Sie so viele USB-Speichersticks an, wie Sie möchten. Das Skript erkennt die Laufwerke beim Einstecken, kopiert die Datei darauf und trennt sie.
- Wenn Sie fertig sind, klicken Sie auf , CtrlCum das Skript zu beenden.
Ausgabe
Das Skript druckt, bevor Dateien kopiert und Laufwerke ausgehängt werden. Verwandte Meldungen werden auf derselben Ebene eingerückt.
Copy to 1
Unmounted 1
Copy to 2
Copy to 3
Unmounted 3
Unmounted 2
Copy to 4
Unmounted 4
Die Zahlen sind möglicherweise nicht zuverlässig. Wenn Sie den gleichen Stick zweimal einstecken, wird er zweimal gezählt.