Como posso copiar arquivos automaticamente para uma unidade USB quando a conecto ao meu computador?


18

Estou procurando uma solução para copiar todos os arquivos de um diretório específico no disco rígido, para um diretório específico em um dispositivo de memória USB, uma vez que este dispositivo esteja conectado.

Eu tenho um programa que baixa episódios de podcast para mim.

Gostaria que esses arquivos fossem movidos automaticamente (ou pelo menos copiados) para o meu mp3 player depois que eu o conectar ao computador.

Eu tenho máquinas windows xp e linux, portanto, uma solução para qualquer uma delas funcionará para mim.


2
Presumo que você não esteja satisfeito com uma sincronização agendada?
Ivo Flipse 14/08/09

Respostas:


23

Você pode facilmente criar sua própria solução para Windows usando o autorun.inf e um arquivo .bat.

Crie um arquivo bat para copiar um diretório para o seu drive USB.

xcopy /e /y c:\podcasts\*.* .\dir_on_usb_drive

Coloque o arquivo bat no seu mp3 player e crie um autorun.inf usando estas instruções

Agora você deve ter sua própria solução caseira para o seu problema, mas certamente é possível que haja soluções pré-fabricadas por aí :)


dica incrível !!!! +10
in.spite 14/08/09

1
Obrigado pela sugestão. O autorun.inf deve ser: [autorun] open = getpodcasts.bat action = copiar podcasts para o jogador Pelo menos o winxp sp2, isso abrirá apenas o AutoPlayer, com os novos "copiar podcasts para o player" na parte superior. Não acho que haja uma maneira de substituir isso e forçá-lo a executar o script silenciosamente. Obviamente, você também precisa ativar a Reprodução Automática. Ter o comando de que preciso aparecer na janela é realmente uma grande melhoria, mas ainda não é exatamente o que eu estava procurando.
Daphshez 14/08/2009

Pensamento agradável! :) +1

3
A Microsoft não removeu a capacidade de usar a execução automática em um pen drive?
ale

10

Para Linux:

Se você não se importa um pouco de script Python, você poderia escrever um daemon que escuta o HAL para eventos e, em seguida, lança um script uma vez por dispositivo de sua escolha foi ligado Um exemplo de script seria semelhante. Presente :

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import dbus
import dbus.service
if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
    import dbus.glib
import gobject
import sys
import os

class DeviceManager:
    def __init__(self):
        self.bus = dbus.SystemBus()
        self.bus.add_signal_receiver(self.device_added,
                        'DeviceAdded',
                        'org.freedesktop.Hal.Manager',
                        'org.freedesktop.Hal',
                        '/org/freedesktop/Hal/Manager')

        self.bus.add_signal_receiver(self.device_removed,
                        'DeviceRemoved',
                        'org.freedesktop.Hal.Manager',
                        'org.freedesktop.Hal',
                        '/org/freedesktop/Hal/Manager')

    def udi_to_device(self, udi):
        return self.bus.get_object("org.freedesktop.Hal", udi)

    def device_added(self, udi):
        print 'Added', udi
        properties = self.udi_to_device(udi).GetAllProperties()
        if properties.get('info.category') == u'volume':
            label, dev = properties.get('volume.label'), properties.get('block.device')
            print 'Mounting %s on /media/%s' %(dev, label)
            os.system('pmount %s /media/%s' %(dev, label))

    def device_removed(self, udi):
        print 'Removed', udi

if __name__ == '__main__':
    m = DeviceManager()

    mainloop = gobject.MainLoop()
    try:
        mainloop.run()
    except KeyboardInterrupt:
        mainloop.quit()
        print 'Exiting...'
        sys.exit(0)

Você apenas precisa modificar a device_added()função para limitá-la ao dispositivo específico e substituir a os.system()chamada pelo seu script personalizado.

Para limitá-lo à unidade, a volume.uuidpropriedade pode ser usada e uma lista completa de propriedades disponíveis pode ser exibida com o hal-deviceprograma.

Para iniciar o daemon na inicialização, basta iniciá-lo /etc/rc.local.


Não consigo verificar se essa é uma boa resposta, mas você merece uma votação positiva pelo problema! De qualquer forma, eu tentaria tornar um pouco mais fácil para os não programadores aqui ;-) como eu!
Ivo Flipse 29/10/09

9

Windows 7 e sincronize automaticamente com o dispositivo flash / USB ao inserir!

Faça o download do SyncToy e estabeleça o nome de sincronização e sincronização da pasta ("SyncTest")

consulte: Como fazer: Usando o SyncToy para criar um espelho noturno dos Meus Documentos

  • Execute o console de gerenciamento do computador
  • Visualizador de eventos / logs do Windows / sistema
  • Encontre o evento de inserção de mídia
    • “O serviço do Portable Device Enumerator Service entrou no estado de execução.” (Pode ser necessário limpar o log de eventos e ejetar / reinserir a mídia para acionar esse evento de log)
  • Na janela superior do evento, clique com o botão direito do mouse no evento e selecione "Anexar Tarefa a Este Evento"
  • O Windows abre "Criar janela de tarefa básica"
  • Dê um nome à sua tarefa e clique em Avançar
  • As informações do evento já estão preenchidas, a seguir
  • A ação deve mostrar "Iniciar um programa", próxima
  • Na janela Iniciar um programa, navegue até SyncToyCmd.exe (ou o aplicativo de sincronização escolhido)
  • Adicione argumentos. Se o seu emparelhamento de backup for chamado SyncTest, digite "-RsyncTest". Não adicione aspas, não adicione espaço depois que a linha de comando -R, SyncToy (ou talvez o Windows 7) for sensível a maiúsculas e minúsculas, para que o SyncTest não seja igual ao sincronismo!
  • Em seguida, Concluir

Você pode executar a tarefa diretamente no Agendador de tarefas para verificar se funciona. Agora, o único outro problema que tive foi executar meu laptop com baterias, no Gerenciador de Tarefas, na guia Condições, desmarque a opção "Iniciar a tarefa apenas se o computador estiver com energia CA", caso contrário, a tarefa só será executada quando o CA estiver conectado.

Além disso, à medida que o USB pesquisa e desconecta / reconecta, essa tarefa é executada a cada dois minutos, na verdade é bem legal, é sincronizada automaticamente com o HDD USB o tempo todo :)


2

Editar: verifica-se que o SyncBack SE tem uma ação de gatilho:

Abra o Perfil, vá para a aba “Quando” e depois para “Inserir”. Permite especificar por letra da unidade, etiqueta ou número de série.

No entanto, a versão SE não é gratuita e apenas o Windows (eu acho)

Ou você pode tentar adicionar um evento de execução automática ao seu programa de sincronização (exemplo para SyncToy) usando o TweakUI

  • Abra o TweakUI
  • Vá para o meu computador -> execução automática -> manipuladores
  • Clique em criar
  • Encontre onde o Synctoy está localizado (arquivos de programa como padrão)
  • Clique duas vezes no logotipo do iniciador do programa
  • Selecione todos os botões de opção de mídia na lista abaixo.
  • Clique OK
  • Clique em aplicar.

  • Agora conecte seu pen drive.

  • No meu computador, clique com o botão direito do mouse na unidade e selecione Propriedades.
  • Clique na guia reprodução automática
  • Selecione música no menu suspenso.
  • Clique no botão de opção "selecionar ação a ser executada"
  • Agora selecione a sincronização com o logotipo SyncToy
  • Repita o procedimento para as outras opções fornecidas no menu suspenso
  • Clique em Aplicar e, em seguida, ok.
  • Remova e reinsira sua unidade para verificar se ela funcionou

Não consigo encontrar nenhum outro programa que seja iniciado automaticamente quando você conectar o seu dispositivo USB.

Todos eles dependem do agendamento para iniciar a sincronização. Você pode optar por agendá-lo todos os nossos; simplesmente falhará se o dispositivo USB não estiver conectado e, se estiver, será executado.

Mas, para ser sincero, seria mais fácil se você simplesmente clicasse no botão de sincronização, também seria necessário conectar seu dispositivo USB manualmente.

Enfim, eu também encontrei uma ferramenta de sincronização que roda no Linux e no Windows: DirSync Pro, que é totalmente gratuito, roda em Java e tem uma ótima interface:

*  Synchronization
      o Powerful synchronization algorithm.
      o Bidirectional (Two way) and Unidirectional (One way) synchronization mode.
      o Option for various behavior of conflict resolution for Bidirectional Synchronization.
      o Synchronizes unlimited number of folders.
      o Large number of options to change the synchronization behavior.
      o Option to synchonise subdirectories recursively.
      o Synchronizes files/folders any file system (FAT, FAT16, FAT32, NTFS, WinFS, UDF, Ext2, Ext3, ...).
      o Synchronizes files from/to network drives
      o Synchronizes files from/to any mounted devices (Harddisks, USB-Sticks, Memory cards, External drives, CD/DVD's, ...).
      o Synchronization could be used for making incremental backups.
      o Option to create up to 50 backups from the modified/changed files before synchronization.
      o Option to define a backup folder.
      o Option for handling symbolic links.
      o Option for handling time-stamps.
* General
      o Easy, clear and user-friendly graphical user interface, no unnecessary gadget you never use.
      o Runs on every modern operating system including Windows™, Linux™ and Macintosh™
      o It is Portable! It does not need any installation. Just run the application!
      o Open source, it is 100% free of charge, 100% free of commercial text, 100% free of advertisements and 100% free of spyware.
      o No time/function limitations
      o Uses no local database, so no overhead
      o Does not need any installation. Just download and run it. You can put it on you USB-stick en you can run it on any computer/any platform.
* Logging
      o Advanced logging/reporting facilities. Just select a log level and define where to write the log.
      o Option to log on application level (default log)
      o Option to log on each directory level (dir log)
      o Option to define the log leven (how much to log)

1
você pode combinar isso com uma tarefa esquecida que está usando os novos eventos de gatilho no Vista e no Windows 7 para executá-lo quando um dispositivo USB estiver conectado.
Paxxi 14/08/09

1
Acho que a solução autorun mencionado em outra resposta poderia fazer o truque
Ivo Flipse

Assim como uma nota, acredito que o "na inserção" apresenta é novo para SyncBack SE 5.
daphshez

1

Eu tentei o método de Steven, mas o evento USB não estava aparecendo em "Visualizador de Eventos / Logs do Windows / Sistema" (estou usando o Windows 7). Eu dei uma espiada e descobri que os eventos de inserção USB estão localizados em "Visualizador de Eventos / Logs de Aplicativos e Serviços / Microsoft / Windows / DriverFrameworks-UserMode / Operational". Tente limpar o registro primeiro (apenas para facilitar a localização do evento desejado) e insira a unidade flash USB. Atualize o log e vários eventos deverão aparecer. Eu escolhi o evento mais importante (ou seja, o mais recente) e atribuí a tarefa a ele (verifique se a descrição do evento parece ter algo específico para a unidade USB específica que você inseriu).

Eu usei o programa SyncBack gratuito para fazer a sincronização real. Funciona bem!


1

Eu apenas uso um AUTORUN.INF com alguns lotes para sincronizar pastas de chaves. Muito simples, muito eficaz.

Além disso, se você tiver apenas um arquivo de leitura, o arquivo autorun.inf arquivará seus


1

Você está simplesmente esquecendo ""e terminando ".\dectory\" ← Essa \barra também.

A fórmula do lote original funciona: são apenas alguns dias. Existem muitos espaços em diretórios, arquivos em lote e prompt de comando.

Como está o meu:

xcopy "F:\Web Stuff\Web Dev\Dev_FactorY Designs\*.*" ".\HTML_PROJ\Web Stuff\Web Dev\Dev_FactorY Designs\" /e /y

1

No Linux, em vez de ter um programa em execução continuamente para escutar eventos, você pode usar os que já estão em execução. Você pode adicionar alguns ganchos ao udev que montam o dispositivo em um local temporário e, em seguida, iniciam o rsync para sincronizar vários diretórios.

A propósito, você pode definir ações específicas de acordo com a assinatura do seu dispositivo: sincronize seus documentos de trabalho quando uma chave específica for inserida, ou sua música se um MP3 player de armazenamento em massa USB estiver inserido ou seus livros ao conectar um Kindle.


1

Quando eu estava configurando pouco sistema de vigilância com o Raspberry Pi, que rodava no Raspbian Wheezy, precisava mover constantemente todos os arquivos da pasta FTP que foi carregada pela câmera IP. Então, eu escrevi o script no diretório inicial (~) e o chamei uma vez por minuto com o cron

crontab -e
*/1 * * * * sudo ~/move_images_to_usb

move_images_to_usb é um script comum do bash, eu não estava usando scripts antes no bash, mas ...

#!/bin/bash

if df | grep "sda1"
then
    mkdir /media/usb0/ipcam1
    cp -r /var/ftp /media/usb0/ipcam1
    rm /var/ftp/*
fi

Quando o drive USB é inserido, ele é nomeado sda1 (outro drive será sdb1, portanto não funcionará)


0

Eu uso um programa replicador da Karenware. Ela é a autora de muitos pequenos programas úteis para Windows (pense em PowerToys desde os primeiros dias do W98 / W2K / XP).

Aqui está o link. http://www.karenware.com/powertools/ptreplicator.asp

Configure em um horário noturno. Se a unidade USB estiver conectada, sincronizará a pasta de download com o conteúdo USB.

É grátis!


obrigado; mas o meu problema não é a cópia em si (é apenas um monte de arquivos que residem em um diretório), mas fazer essa cópia acontecer no momento certo. Uma tarefa agendada é boa, mas não é exatamente o que eu estava procurando.
daphshez 11/09/09

0

Este é um tópico antigo, mas eu pensei em colocar isso aqui para quem quiser. Altere as informações relevantes para atender às suas necessidades, para que tudo faça por você. Agradecemos a /superuser//users/232313/tyler que fez a primeira iteração disso.

@echo off
cls
echo waiting
goto check

Change the STUFF TO COPY location to the folder that you want 
everything inside to be send to the usb's, and change the 3 instances of 
G: to whatever drive letter that the USB uses.
Good Luck!

:start
set choice=
robocopy "C:\STUFFTOCOPY" "G:" /E
echo Waiting for removal
goto wait

:check
timeout /t 1 /nobreak >nul
if exist "G:" (goto start) else goto check

:wait
timeout /t 1 /nobreak >nul
if exist "G:" (goto wait) else (
echo removed
echo waiting
goto check
)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.