Verwendung

Verwendung

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 TheFiledurch 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 xmessagees 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 Sie sudo apt install inotify-toolsdies durch.
  • Konfigurieren Sie Ihren Dateimanager (zum Beispiel Nemo oder Nautilus) so, dassnichtGemountete Laufwerke automatisch öffnen. umountKann 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 mitchmod 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.

verwandte Informationen