1

Я помогаю моей девушке с событием, когда она должна загрузить около 1000 флешек одним и тем же файлом.

Это довольно маленький файл (всего несколько МБ), но утомительная часть фактически копирует файл.

Есть ли способ автоматически скопировать файл на флэш-накопитель USB в момент его вставки? Это сделало бы ее работу очень легкой.

Моя настольная ОС - Windows 10, но у меня есть доступ и к Linux. Я бы даже не был против написания bash-скрипта для Linux, если бы это было проще.

2 ответа2

0

В 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

Это просто чтобы показать принцип. Прежде чем начать, убедитесь, что в /media/$USER/ ничего не подключено (если вы не подключили первый диск). Вы можете заменить TheFile параметром или предустановленной переменной среды, но убедитесь, что он находится в вашем текущем каталоге, чтобы не было пути, иначе проверка его существования на диске уже не удастся.

Вероятно, вы можете сделать все это на диске Ubuntu Live без установки, но вам нужно будет проверить, где смонтированы флеш-накопители, и при необходимости изменить скрипт; Также я не уверен, включен ли xmessage на Live-диск, поэтому вам, возможно, потребуется установить его, если вы не используете другой способ указать, что дисковод нуждается в замене.

0

Расширение основной идеи AFH, предполагая, что ваша ОС Linux автоматически монтирует флешки в /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-накопителей, сколько хотите. Сценарий обнаруживает диски при их подключении, копирует на них файл и размонтирует их.
  • Когда закончите, нажмите Ctrl C, чтобы выйти из сценария.

Выход

Сценарий печатается до копирования файлов и после размонтирования дисков. Связанные сообщения имеют отступ на том же уровне.

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

Цифры могут быть ненадежными. Если вы вставите одну и ту же палку дважды, она будет засчитана дважды.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .