Uso

Uso

Estou ajudando minha namorada em um evento em que ela precisa carregar cerca de 1.000 unidades flash USB com o mesmo arquivo.

É um arquivo bastante pequeno (apenas alguns MB), mas a parte tediosa é copiar o arquivo.

Existe uma maneira de copiar automaticamente um arquivo para uma unidade flash USB no momento em que ele é inserido? Isso tornaria seu trabalho muito fácil.

Meu sistema operacional de desktop é o Windows 10, mas também tenho acesso ao Linux. Eu nem me oporia a escrever um script bash para Linux, se isso fosse mais fácil.

Responder1

No Ubuntu 16.04 uma unidade flash USB é montada /media/$USER/LabelName, mas é possível fazer a cópia do arquivo sem saber. Um roteiro aproximado seria: -

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

Isto é apenas para mostrar o princípio. Uma coisa que você precisa fazer é certificar-se de que não há nada montado /media/$USER/antes de começar (a menos que você já tenha montado a primeira unidade). Você pode substituir TheFilepor um parâmetro ou uma variável de ambiente predefinida, mas certifique-se de que esteja em seu diretório atual, para que não haja caminho, caso contrário, a verificação de sua existência na unidade já falhará.

Você provavelmente pode fazer tudo isso em um disco do Ubuntu Live sem instalar, mas precisará verificar onde os pen-drives estão montados e modificar o script, se necessário; também não tenho certeza se xmessageestá incluído em um disco Live, então pode ser necessário instalá-lo, a menos que você use outro método para indicar que a unidade precisa ser alterada.

Responder2

Uma extensão deA ideia básica do AFH, supondo que seu sistema operacional Linux monte unidades flash automaticamente em arquivos /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

Uso

  • Instale inotifywaitse ainda não o fez. No Ubuntu use sudo apt install inotify-toolspara fazer isso.
  • Configure seu gerenciador de arquivos (por exemplo nemo ou nautilus) paranãoabra unidades montadas automaticamente. umountpode falhar se uma janela do gerenciador de arquivos mostrar o conteúdo da unidade a ser desmontada.
  • Salve o script como autocopy.sh.
  • Torne o script executável usandochmod u+x autocopy.sh
  • Inicie o script usando./autocopy.sh '/path/to/file.ext'
  • Insira quantas unidades flash USB desejar. O script detecta as unidades conforme elas são conectadas, copia o arquivo para elas e as desmonta.
  • Quando terminar, clique CtrlCpara sair do script.

Saída

O script é impresso antes que os arquivos sejam copiados e depois que as unidades sejam desmontadas. As mensagens relacionadas são recuadas no mesmo nível.

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

Os números podem não ser confiáveis. Se você inserir o mesmo bastão duas vezes, ele será contado duas vezes.

informação relacionada