
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 TheFile
por 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 xmessage
está 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
inotifywait
se ainda não o fez. No Ubuntu usesudo apt install inotify-tools
para fazer isso. - Configure seu gerenciador de arquivos (por exemplo nemo ou nautilus) paranãoabra unidades montadas automaticamente.
umount
pode 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 usando
chmod 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.