1 votes

Copie automatique de fichiers sur des centaines de clés USB.

J'aide ma copine pour un événement où elle doit charger environ 1 000 clés USB avec le même fichier.

Il s'agit d'un fichier assez petit (quelques Mo seulement), mais la partie la plus fastidieuse consiste à copier le fichier.

Existe-t-il un moyen de copier automatiquement un fichier sur une clé USB au moment où elle est insérée ? Cela rendrait son travail très facile.

Mon système d'exploitation de bureau est Windows 10, mais j'ai également accès à Linux. Je ne serais même pas opposé à écrire un script bash pour Linux, si cela était plus facile.

0voto

AFH Points 16642

Sur Ubuntu 16.04, une clé USB est montée dans le dossier /media/$USER/LabelName mais il est possible de gérer la copie de fichiers sans le savoir. Un script approximatif serait:-

#!/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

Ceci est juste pour montrer le principe. Une chose que vous devez faire est de vous assurer qu'il n'y a rien de monté en /media/$USER/ avant de commencer (sauf si vous avez déjà monté le premier disque). Vous pouvez remplacer TheFile par un paramètre ou une variable d'environnement prédéfinie, mais assurez-vous qu'il se trouve dans votre répertoire courant, de sorte qu'il n'y ait pas de chemin d'accès, sinon la vérification de son existence sur le lecteur déjà échouera.

Vous pouvez probablement faire tout cela sur un disque Ubuntu Live sans l'installer, mais vous devrez vérifier où sont montés les pen-drives et modifier le script si nécessaire ; de plus, je ne suis pas sûr si xmessage est inclus sur un disque Live, vous devrez donc peut-être l'installer, à moins que vous n'utilisiez une autre méthode pour indiquer que le lecteur doit être changé.

0voto

Socowi Points 469

Une extension de L'idée de base de l'AFH en supposant que votre système d'exploitation Linux monte les lecteurs flash automatiquement dans /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

Utilisation

  • Installer inotifywait si vous ne l'avez pas déjà fait. Sur Ubuntu, utilisez sudo apt install inotify-tools pour le faire.
  • Configurer votre gestionnaire de fichiers (par exemple nemo ou nautilus) pour no ouvrir automatiquement les lecteurs montés. umount peut échouer si une fenêtre du gestionnaire de fichiers affiche le contenu du lecteur à démonter.
  • Sauvegarder le script en tant que autocopy.sh .
  • Rendez le script exécutable en utilisant chmod u+x autocopy.sh
  • Lancez le script en utilisant ./autocopy.sh '/path/to/file.ext'
  • Insérez autant de clés USB que vous le souhaitez. Le script détecte les lecteurs lorsqu'ils sont branchés, y copie le fichier et les démonte.
  • Quand vous avez terminé, appuyez sur CtrlC pour quitter le script.

Sortie

Le script s'imprime avant la copie des fichiers et après le démontage des lecteurs. Les messages connexes sont indentés au même niveau.

Copy to 1
Unmounted 1
               Copy to 2
                              Copy to 3
                              Unmounted 3
               Unmounted 2
                                             Copy to 4
                                             Unmounted 4

Les chiffres peuvent ne pas être fiables. Si vous insérez deux fois le même bâton, il est compté deux fois.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X