Copia arquivos automaticamente para centenas de unidades flash USB

1

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

É um arquivo pequeno (apenas alguns MB), mas a parte entediante está copiando o arquivo.

Existe uma maneira de copiar automaticamente um arquivo para uma unidade flash USB no momento em que é inserido? Isso tornaria o trabalho dela 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 o Linux, se isso fosse mais fácil.

    
por user1472409 09.06.2018 / 18:10

2 respostas

0

No Ubuntu 16.04, uma unidade flash USB é montada em /media/$USER/LabelName , mas é possível manipular a cópia de arquivos sem conhecê-la. 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 em /media/$USER/ antes de iniciar (a menos que você já tenha montado a primeira unidade). Você pode substituir TheFile por um parâmetro ou por uma variável de ambiente predefinida, mas certifique-se de que esteja no 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 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 xmessage está incluso em um disco Live, então você pode precisar instalá-lo, a menos que você use outro método de indicar que a unidade precisa ser alterada.

    
por 10.06.2018 / 00:09
0

Uma extensão da ideia básica do AFH , assumindo que o seu sistema operacional Linux monta drives flash automaticamente em /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 inotifywait se você ainda não o fez. No Ubuntu, use sudo apt install inotify-tools para fazer isso.
  • Configure o seu gerenciador de arquivos (por exemplo nemo ou nautilus) para não abrir as unidades montadas automaticamente. umount pode falhar se uma janela do gerenciador de arquivos estiver mostrando o conteúdo da unidade a ser desmontada.
  • Salve o script como autocopy.sh .
  • Torne o script executável usando chmod u+x autocopy.sh
  • Inicie o script usando ./autocopy.sh '/path/to/file.ext'
  • Insira quantas unidades flash USB você desejar. O script detecta as unidades à medida que elas são conectadas, copia o arquivo para elas e as desmonta.
  • Quando terminar, pressione Ctrl C para sair do script.

Saída

O script é impresso antes de os arquivos serem copiados e após as unidades serem desmontadas. 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, será contado duas vezes.

    
por 14.06.2018 / 15:46