¿Cómo puedo copiar automáticamente archivos a una unidad USB cuando lo conecto a mi computadora?

18

Estoy buscando una solución para copiar todos los archivos de un directorio específico en el disco duro, a un directorio específico en un dispositivo de memoria USB, una vez que este dispositivo está conectado.

Tengo un programa que descarga episodios de podcast para mí.

Me gustaría que estos archivos se muevan automáticamente (o al menos se copien) a mi reproductor de mp3 una vez que lo conecte a la computadora.

Tengo máquinas Windows XP y Linux, por lo que una solución para cualquiera de ellas funcionará para mí.

daphshez
fuente
2
¿Supongo que no estás satisfecho con una sincronización programada?
Ivo Flipse

Respuestas:

23

Puede crear fácilmente su propia solución para Windows utilizando autorun.inf y un archivo .bat.

Cree un archivo bat para copiar un directorio a su unidad usb.

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

Coloque el archivo bat en su reproductor de mp3 y cree un autorun.inf usando estas instrucciones

Ahora debería tener su propia solución casera para su problema, pero ciertamente es posible que haya soluciones prefabricadas por ahí :)

Paxxi
fuente
consejo increíble !!!! +10
in.spite
1
Gracias por la sugerencia El autorun.inf debería ser: [autorun] open = getpodcasts.bat action = copiar podcasts al jugador Al menos winxp sp2, esto solo abrirá el AutoPlayer, con el nuevo "copiar podcasts al jugador" en la parte superior. No creo que haya una forma de anular esto y obligarlo a ejecutar el script en silencio. También, obviamente, tienes que tener AutoPlay activado. Tener el comando que necesito aparece en la ventana es realmente una gran mejora, pero aún no es exactamente lo que estaba buscando.
daphshez
¡bien pensado! :) +1
3
¿Microsoft simplemente no eliminó la capacidad de usar la ejecución automática en una memoria USB?
cerveza
10

Para Linux:

Si no te importa un poco de script Python se podría escribir un demonio que escuchas a HAL para eventos y luego lanza un script una vez al dispositivo de su elección se ha enchufado un script de ejemplo se vería así. Esto :

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

Solo tiene que modificar la device_added()función para limitarla al dispositivo específico y reemplazar la os.system()llamada con su script personalizado.

Para limitarlo a la unidad volume.uuid, se puede usar la propiedad y se puede mostrar una lista completa de las propiedades disponibles con el hal-deviceprograma.

Para iniciar el demonio en el arranque, solo inícielo /etc/rc.local.

Grumbel
fuente
No puedo verificar si esta es una buena respuesta, ¡pero te mereces un voto positivo solo por el problema! De todos modos, trataría de hacerlo un poco más fácil para los no programadores aquí ;-) ¡ como yo!
Ivo Flipse
9

¡Windows 7 y sincronización automática a su dispositivo flash / USB al insertarlo!

Descargue SyncToy y establezca el emparejamiento de carpetas y el nombre de sincronización ("SyncTest")

ver: Cómo: Usar SyncToy para crear un espejo nocturno de Mis documentos

  • Ejecute la consola de administración de la computadora
  • Visor de eventos / registros de Windows / sistema
  • Encuentra el evento de inserción de medios
    • “El servicio del Servicio de enumeración de dispositivos portátiles ingresó al estado de ejecución”. (Es posible que deba borrar el registro de eventos y expulsar / reinsertar sus medios para activar este evento de registro)
  • En la ventana superior del evento, haga clic derecho en el evento y seleccione "Adjuntar tarea a este evento"
  • Windows abre "Crear ventana de tareas básicas"
  • Dale un nombre a tu tarea y presiona siguiente
  • La información del evento ya está completada, a continuación
  • La acción debe mostrar "Iniciar un programa", a continuación
  • En la ventana Iniciar un programa, vaya a SyncToyCmd.exe (o la aplicación de sincronización elegida)
  • Agrega argumentos. Si su emparejamiento de respaldo se llama SyncTest, ingrese "-RsyncTest". No agregue comillas, no agregue un espacio después de -R, la línea de comando SyncToy (o tal vez Windows 7) distingue entre mayúsculas y minúsculas, por lo que SyncTest no equivale a synctest.
  • Siguiente, terminar

Puede ejecutar la tarea directamente desde el Programador de tareas para verificar que funciona. Ahora, el único otro problema que tuve fue ejecutar mi computadora portátil con baterías, en el Administrador de tareas, en la pestaña de condiciones, desmarque "Iniciar la tarea solo si la computadora tiene alimentación de CA", de lo contrario, la tarea solo se ejecutará cuando la CA esté conectada.

Además, a medida que el USB sondea y se desconecta / vuelve a conectar, esta tarea se ejecutará cada dos minutos, realmente genial, se sincroniza automáticamente con el HDD USB todo el tiempo :)

Steven Teal
fuente
2

Editar: resulta que SyncBack SE tiene una acción de activación:

Abra Perfil, vaya a la pestaña "Cuándo", luego "Insertar". Le permite especificar por letra de unidad, etiqueta o número de serie.

Sin embargo, la versión SE no es gratuita y solo Windows (creo)

O podría intentar agregar un evento de ejecución automática para su programa de sincronización (ejemplo para SyncToy) usando TweakUI

  • Abrir TweakUI
  • Vaya a mi computadora -> ejecución automática–> manejadores
  • Haga clic en crear
  • Encuentre dónde se encuentra Synctoy (archivos de programa por defecto)
  • Haga doble clic en el logotipo del iniciador de programas.
  • Seleccione todos los botones de radio de medios en la lista a continuación.
  • Haga clic en Aceptar
  • Haga clic en aplicar.

  • Ahora conecte su pen drive.

  • En mi computadora, haga clic derecho en la unidad y seleccione propiedades.
  • Haga clic en la pestaña de reproducción automática
  • Seleccione música del menú desplegable.
  • Haga clic en el botón de radio "seleccionar acción para realizar"
  • Ahora seleccione la sincronización con el logotipo de SyncToy
  • Repita para las otras opciones dadas por el menú desplegable
  • Haga clic en aplicar y luego en ok.
  • Retire y vuelva a insertar su unidad para ver si ha funcionado

Parece que no puedo encontrar ningún otro programa que se inicie automáticamente cuando conecte su dispositivo USB.

Todos dependen de la programación para comenzar a sincronizar. Puede decidir programarlo todos los días, simplemente fallará si el dispositivo USB no está conectado y se ejecutará si lo está.

Pero, para ser honesto, sería más fácil si simplemente hicieras clic en el botón de sincronización, también debes enchufar tu dispositivo USB manualmente.

De todos modos, también encontré una herramienta de sincronización que se ejecuta tanto en Linux como en Windows: DirSync Pro, que es completamente gratuito, se ejecuta en Java y tiene una buena GUI:

*  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)
Ivo Flipse
fuente
1
posiblemente podría combinar esto con una tarea programada que utiliza los nuevos eventos de activación en Vista y Windows 7 para que se ejecute cuando se conecta un dispositivo usb.
Paxxi
1
Creo que la solución de ejecución automática mencionada en la otra respuesta podría funcionar
Ivo Flipse el
Solo como una nota, creo que las características "en inserción" son nuevas para SyncBack SE 5.
daphshez
1

Probé el método de Steven, pero el evento USB no se mostraba en "Visor de eventos / Registros / Sistema de Windows" (estoy usando Windows 7). Busqué un poco y descubrí que los eventos de inserción USB se encuentran en "Visor de eventos / Registros de aplicaciones y servicios / Microsoft / Windows / DriverFrameworks-UserMode / Operational". Intente borrar el registro primero (solo para que sea más fácil encontrar el evento que desea), luego inserte la unidad flash USB. Actualice el registro y aparecerán un montón de eventos. Elegí el evento más importante (es decir, el más reciente), y asigné la tarea a eso (asegúrese de que la descripción del evento parece tener algo específico para la unidad USB particular que insertó).

Usé el programa gratuito SyncBack para hacer la sincronización real. ¡Funciona genial!

GordonM
fuente
1

Solo uso un AUTORUN.INF con algunos lotes para sincronizar carpetas de claves. Muy simple muy efectivo.

Además, si tiene un archivo autorun.inf archivado de solo lectura, su virus de memoria USB de contrato duro

Ligeramente salado
fuente
1

Simplemente se está olvidando ""y termina ".\dectory\" ← Esa \barra diagonal también.

La fórmula original por lotes funciona, ahora son días, hay muchos espacios en los directorios, archivos por lotes y el símbolo del sistema los ODIA.

Cómo se ve el mío:

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

En Linux, en lugar de tener un programa ejecutándose continuamente para escuchar eventos, puede usar los que ya se están ejecutando. Puede agregar algunos ganchos a udev que montan el dispositivo en una ubicación temporal y luego inicia rsync para sincronizar un montón de directorios.

Por cierto, puede definir acciones específicas de acuerdo con la firma de su dispositivo: sincronice sus documentos de trabajo cuando se inserta una clave específica, o su música si se inserta un reproductor de MP3 de almacenamiento masivo USB, o sus libros cuando conecta un Kindle allí.

Daduke
fuente
1

Cuando estaba configurando un pequeño sistema de vigilancia con Raspberry Pi, que se ejecutaba en Raspbian Wheezy, necesitaba mover constantemente todos los archivos de la carpeta FTP que cargaba la cámara IP. Entonces, escribí un script en el directorio de inicio (~) y lo llamé una vez por minuto con cron

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

move_images_to_usb es un script bash ordinario, no estaba haciendo scripts antes en bash, pero ...

#!/bin/bash

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

Cuando se inserta una unidad USB, se llama sda1 (otra unidad será sdb1, por lo que no funcionará)

57ar7up
fuente
0

Yo uso un programa replicador de Karenware. Es la autora de muchos pequeños programas útiles para Windows (piense en PowerToys de los primeros días de W98 / W2K / XP).

Aquí está el enlace. http://www.karenware.com/powertools/ptreplicator.asp

Configúrelo en un horario nocturno. Si la unidad USB está conectada, sincronizará la carpeta de descarga con el contenido USB.

¡Es gratis!


fuente
Gracias; pero mi problema no es la copia en sí (es solo un montón de archivos que residen en un directorio), sino hacer que esta copia suceda en el momento adecuado. Una tarea programada es agradable, pero no es exactamente lo que estaba buscando.
daphshez
0

Este es un hilo viejo, pero pensé que podría poner esto aquí para cualquiera que lo quiera. Cambie la información relevante para satisfacer sus necesidades y luego lo hará todo por usted. Gracias a /superuser//users/232313/tyler que hizo la primera iteración de esto.

@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
)
edeetee
fuente