it-swarm.dev

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

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í.

17
daphshez

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í :)

23
Paxxi

Para Linux:

Si no le importa un poco Python secuencias de comandos, podría escribir un demonio que escuche a HAL en busca de eventos y luego inicie una secuencia de comandos una vez que se haya conectado un dispositivo de su elección. Un ejemplo de secuencia de comandos sería: 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 __== '__main__':
    m = DeviceManager()

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

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

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

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

10
Grumbel

¡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
  • Encuentre 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 está con 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 :)

8
steven Teal

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 puede 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 conecta tu 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 Aceptar.
  • 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 gratis, se ejecuta en Java y tiene una GUI agradable:

*  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)
2
Ivo Flipse

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 rígido

1
Lightly Salted

En Linux, en lugar de tener un programa en ejecución continua para escuchar eventos, puede usar los que ya están en ejecución. Puede agregar algunos ganchos a udev que monta 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í.

1
Daduke

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 se cargaba con 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á)

1
57ar7up

Simplemente te estás olvidando de "" y terminar ".\dectory\" ← Ese final \ barra también.

La fórmula original por lotes funciona. Hace solo unos días. Hay muchos espacios en directorios, archivos por lotes y símbolo del sistema.

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
1
GimmiLFactorY

Probé el método de Steven, pero el evento USB no se mostraba en "Visor de eventos/Registros de Windows/Sistema" (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!

1
GordonM

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. Crédito a https://superuser.com/users/232313/tyler quien 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
)
0
edeetee

Yo uso un programa replicador de Karenware. Ella 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!

0
Steve Kalman