ฉันจะคัดลอกไฟล์ไปยังไดรฟ์ USB โดยอัตโนมัติได้อย่างไรเมื่อฉันเชื่อมต่อกับคอมพิวเตอร์ของฉัน


18

ฉันกำลังมองหาวิธีการคัดลอกไฟล์ทั้งหมดจากไดเรกทอรีเฉพาะบนฮาร์ดไดรฟ์ไปยังไดเรกทอรีเฉพาะบนอุปกรณ์หน่วยความจำ USB เมื่ออุปกรณ์นี้เชื่อมต่อ

ฉันมีโปรแกรมที่ดาวน์โหลดตอนพอดคาสต์สำหรับฉัน

ฉันต้องการให้ไฟล์เหล่านี้ถูกย้ายโดยอัตโนมัติ (หรือคัดลอกอย่างน้อย) ไปยังเครื่องเล่น mp3 ของฉันเมื่อฉันเชื่อมต่อกับคอมพิวเตอร์

ฉันมีทั้ง windows xp และเครื่อง linux ดังนั้นวิธีแก้ปัญหาใด ๆ ของพวกเขาจะได้ผลสำหรับฉัน


2
ฉันถือว่าคุณไม่พอใจกับการซิงโครไนซ์ตามกำหนดการหรือไม่
Ivo Flipse

คำตอบ:


23

คุณสามารถสร้างโซลูชันของคุณเองสำหรับ Windows ได้อย่างง่ายดายโดยใช้ autorun.inf และไฟล์. bat

สร้างไฟล์ bat เพื่อคัดลอกไดเรกทอรีไปยังไดรฟ์ usb ของคุณ

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

วางไฟล์ bat บนเครื่องเล่น MP3 ของคุณและสร้าง autorun.inf โดยใช้คำแนะนำเหล่านี้

ตอนนี้คุณควรมีวิธีแก้ปัญหาแบบ homebuilt ของคุณเอง แต่เป็นไปได้อย่างแน่นอนว่ามีวิธีแก้ไขปัญหาที่สร้างไว้ล่วงหน้าแล้ว :)


เคล็ดลับที่น่ากลัว !!!! +10
in.spite

1
ขอบคุณสำหรับคำแนะนำ autorun.inf ควรเป็น: [autorun] open = getpodcasts.bat action = คัดลอกพ็อดแคสต์ไปยังผู้เล่นอย่างน้อย winxp sp2 สิ่งนี้จะเปิด AutoPlayer เท่านั้นโดยมี "podc ast พ็อดคาสท์ที่เล่นใหม่" ที่ด้านบน ฉันไม่คิดว่าจะมีวิธีแทนที่สิ่งนี้และบังคับให้รันสคริปต์อย่างเงียบ ๆ ยังเห็นได้ชัดว่าคุณต้องเปิด AutoPlay มีคำสั่งที่ฉันต้องการป๊อปบนหน้าต่างเป็นจริง imporvement ที่ดี แต่ก็ยังไม่ตรงกับสิ่งที่ฉันกำลังมองหา
daphshez

คิดดี! :) +1

3
Microsoft ไม่ได้ลบความสามารถในการใช้การทำงานอัตโนมัติใน thumb drive หรือไม่?
เบียร์

10

สำหรับ Linux:

หากคุณไม่ทราบสคริปต์หลามน้อยคุณสามารถเขียนภูตที่ฟัง HAL สำหรับเหตุการณ์ที่เกิดขึ้นและจากนั้นเปิดสคริปต์ครั้งหนึ่งเคยเป็นอุปกรณ์ที่คุณเลือกได้รับการเสียบสคริปต์ตัวอย่างจะมีลักษณะเช่น. นี้ :

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

คุณเพียงแค่ต้องปรับเปลี่ยนdevice_added()ฟังก์ชั่นเพื่อ จำกัด เฉพาะอุปกรณ์ที่ต้องการและแทนที่การos.system()โทรด้วยสคริปต์ที่กำหนดเองของคุณ

สำหรับการ จำกัด ไปยังไดรฟ์volume.uuidคุณสมบัติสามารถใช้งานได้และรายการคุณสมบัติทั้งหมดที่มีอยู่สามารถแสดงพร้อมhal-deviceโปรแกรมได้

/etc/rc.localในการเริ่มต้นในการบูตภูตเพียงเริ่มต้นจาก


ฉันไม่สามารถตรวจสอบว่านี่เป็นคำตอบที่ดี แต่คุณสมควรได้รับ upvote สำหรับปัญหาเพียงอย่างเดียว! อย่างไรก็ตามฉันจะพยายามทำให้มันง่ายขึ้นสำหรับผู้ที่ไม่ใช่โปรแกรมเมอร์ที่นี่ ;-) เหมือนฉัน!
Ivo Flipse

9

Windows 7 และ autosync กับอุปกรณ์แฟลช / USB ของคุณเมื่อทำการแทรก!

ดาวน์โหลด SyncToyและสร้างการจับคู่โฟลเดอร์และชื่อการซิงค์ ("SyncTest")

ดู: วิธีใช้: การใช้ SyncToy เพื่อสร้างมิเรอร์ยามค่ำคืนของเอกสารของฉัน

  • เรียกใช้คอนโซลการจัดการคอมพิวเตอร์
  • ตัวแสดงเหตุการณ์ / windows บันทึก / ระบบ
  • ค้นหาเหตุการณ์การแทรกสื่อ
    • “ บริการตัวระบุอุปกรณ์พกพาเข้าสู่สถานะกำลังทำงาน” (คุณอาจต้องล้างบันทึกเหตุการณ์และนำออก / ใส่สื่ออีกครั้งเพื่อเรียกเหตุการณ์บันทึกนี้)
  • ในหน้าต่างกิจกรรมด้านบนคลิกขวาที่เหตุการณ์และเลือก "แนบงานกับกิจกรรมนี้"
  • Windows เปิด "สร้างหน้าต่างงานพื้นฐาน"
  • ตั้งชื่องานของคุณและกดปุ่มถัดไป
  • ข้อมูลเหตุการณ์ถูกกรอกไว้แล้วถัดไป
  • การดำเนินการควรแสดง "เริ่มโปรแกรม" ถัดไป
  • ในหน้าต่างเริ่มโปรแกรมเรียกดู SyncToyCmd.exe (หรือแอปซิงค์ที่คุณเลือก)
  • เพิ่มข้อโต้แย้ง หากการจับคู่สำรองของคุณชื่อ SyncTest ให้ป้อน "-RsyncTest" อย่าเพิ่มเครื่องหมายคำพูดอย่าเพิ่มช่องว่างหลังจากบรรทัดคำสั่ง -R, SyncToy (หรืออาจเป็น Windows 7) เป็นแบบตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ดังนั้น SyncTest จึงไม่เท่ากับ synctest!
  • ถัดไปเสร็จสิ้น

คุณสามารถเรียกใช้งานได้จาก Task Scheduler เพื่อตรวจสอบว่ามันใช้งานได้ ตอนนี้ปัญหาอื่น ๆ ที่ฉันใช้กับแล็ปท็อปของฉันคือแบตเตอรี่ในตัวจัดการงานภายใต้แท็บเงื่อนไขยกเลิกการเลือก "เริ่มงานเฉพาะเมื่อคอมพิวเตอร์ใช้ไฟ AC" มิฉะนั้นงานจะทำงานเมื่อเสียบปลั๊ก AC เท่านั้น

นอกจากนี้ในขณะที่โพล USB และยกเลิกการเชื่อมต่อ / เชื่อมต่อใหม่งานนี้จะทำงานทุก ๆ สองสามนาทีจริง ๆ แล้วเจ๋งจริงมันซิงค์อัตโนมัติกับ HDD USB ตลอดเวลา :)


2

แก้ไข: ปรากฎว่า SyncBack SE มีการกระทำทริกเกอร์:

เปิดโปรไฟล์ไปที่แท็บ“ เมื่อ” จากนั้น“ แทรก” ช่วยให้คุณระบุด้วยตัวอักษรชื่อไดรฟ์ฉลากหรือหมายเลขซีเรียล

อย่างไรก็ตามรุ่น SE ไม่ได้ฟรีและ Windows เท่านั้น (ฉันคิดว่า)

หรือคุณสามารถลองเพิ่มเหตุการณ์การทำงานอัตโนมัติสำหรับโปรแกรมซิงค์ของคุณ (ตัวอย่างสำหรับ SyncToy) โดยใช้ TweakUI

  • เปิด TweakUI
  • ไปที่คอมพิวเตอร์ของฉัน -> ตัวจัดการอัตโนมัติ -> ตัวจัดการ
  • คลิกสร้าง
  • ค้นหาที่ตั้งของ Synctoy (ไฟล์โปรแกรมเป็นค่าเริ่มต้น)
  • คลิกสองครั้งที่โลโก้โปรแกรมเรียกใช้งาน
  • เลือกปุ่มตัวเลือกสื่อทั้งหมดในรายการด้านล่าง
  • คลิกตกลง
  • คลิกใช้

  • ตอนนี้เสียบไดรฟ์ปากกาของคุณ

  • ในคอมพิวเตอร์ของฉันคลิกขวาที่ไดรฟ์และเลือกคุณสมบัติ
  • คลิกที่แท็บเล่นอัตโนมัติ
  • เลือกเพลงจากเมนูแบบเลื่อนลง
  • คลิกปุ่มตัวเลือก“ เลือกการกระทำเพื่อดำเนินการ”
  • ตอนนี้เลือกการซิงค์ที่มีโลโก้ SyncToy
  • ทำซ้ำสำหรับตัวเลือกอื่น ๆ ที่กำหนดโดยเมนูแบบเลื่อนลง
  • คลิกสมัครแล้วตกลง
  • ลบและแทรกไดรฟ์ของคุณอีกครั้งเพื่อดูว่าทำงานหรือไม่

ฉันไม่สามารถค้นหาโปรแกรมอื่น ๆ ที่จะเริ่มต้นโดยอัตโนมัติเมื่อคุณเชื่อมต่ออุปกรณ์ USB ของคุณ

พวกเขาทั้งหมดขึ้นอยู่กับการตั้งเวลาเพื่อเริ่มการซิงค์ คุณสามารถตัดสินใจกำหนดเวลาให้กับเราได้ทุกอย่างมันจะล้มเหลวหากอุปกรณ์ USB ไม่ได้เชื่อมต่อและทำงานหากเป็น

แต่จริงๆแล้วมันจะง่ายขึ้นถ้าคุณคลิกที่ปุ่มซิงค์คุณจะต้องเสียบอุปกรณ์ USB ด้วยตนเองเช่นกัน

อย่างไรก็ตามฉันยังพบเครื่องมือการซิงโครไนซ์ที่ทำงานบนทั้ง Linux และ Windows: DirSync Proซึ่งฟรีโดยสมบูรณ์รันบน Java และมี 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)

1
คุณอาจรวมสิ่งนี้กับงาน schduled ที่ใช้ทริกเกอร์เหตุการณ์ใหม่ใน Vista และ Windows 7 เพื่อให้มันทำงานเมื่อเชื่อมต่ออุปกรณ์ usb
Paxxi

1
ผมคิดว่าวิธีการแก้ปัญหาการทำงานอัตโนมัติที่กล่าวถึงในคำตอบอื่น ๆ สามารถทำเคล็ดลับ
Ivo Flipse

เช่นเดียวกับโน้ตฉันเชื่อว่าฟีเจอร์ "on insert" เป็นสิ่งใหม่สำหรับ SyncBack SE 5
daphshez

1

ฉันลองใช้วิธีของ Steven แต่เหตุการณ์ USB ไม่ปรากฏขึ้นใน "Event Viewer / Windows Logs / System" (ฉันใช้ Windows 7) ฉันแหย่ไปเล็กน้อยและพบว่าเหตุการณ์การแทรก USB อยู่ใน "ตัวแสดงเหตุการณ์ / แอปพลิเคชันและบริการบันทึก / Microsoft / Windows / DriverFrameworks-UserMode / Operational" ลองล้างบันทึกก่อน (เพื่อให้ค้นหาเหตุการณ์ที่คุณต้องการได้ง่ายขึ้น) จากนั้นใส่แฟลชไดรฟ์ USB รีเฟรชบันทึกและเหตุการณ์กลุ่มต่างๆควรปรากฏขึ้น ฉันเลือกเหตุการณ์ที่ได้รับความนิยมสูงสุด (เช่นล่าสุด) และมอบหมายงานให้กับสิ่งนั้น (ตรวจสอบให้แน่ใจว่าคำอธิบายเหตุการณ์ดูเหมือนว่ามีบางสิ่งที่เฉพาะเจาะจงสำหรับไดรฟ์ USB ที่คุณใส่ไว้)

ฉันใช้โปรแกรม SyncBack ฟรีเพื่อทำการซิงค์ที่แท้จริง ใช้งานได้ดี!


1

ฉันใช้ AUTORUN.INF เพียงไม่กี่ชุดเพื่อซิงค์โฟลเดอร์หลัก ง่ายมากที่มีประสิทธิภาพมาก

นอกจากนี้หากคุณมีการอ่านอย่างเดียวไฟล์ autorun.inf ที่เก็บถาวรของไวรัส usb-stick แบบถาวร


1

คุณเพียงแค่ลืม""และจบ".\dectory\" ←ก็จบ\สแลชด้วยเช่นกัน

สูตรแบตช์ดั้งเดิมทำงานได้เพียงไม่กี่วันมีช่องว่างจำนวนมากในไดเรกทอรีไฟล์แบตช์และคำสั่งเกลียดคำสั่งเหล่านั้น

ลักษณะของฉัน:

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

1

ภายใต้ Linux แทนที่จะให้โปรแกรมทำงานอย่างต่อเนื่องเพื่อฟังเหตุการณ์คุณสามารถใช้โปรแกรมที่ทำงานอยู่แล้ว คุณสามารถเพิ่ม hooks บางอันเพื่อ udev ที่เมาท์อุปกรณ์ไปยังตำแหน่งชั่วคราวจากนั้นเรียกใช้ rsync เพื่อซิงโครไนซ์ไดเรกทอรีต่างๆ

โดยวิธีที่คุณสามารถกำหนดการกระทำเฉพาะตามลายเซ็นของอุปกรณ์ของคุณ: ซิงโครไนซ์เอกสารงานของคุณเมื่อมีการแทรกคีย์เฉพาะหรือเพลงของคุณถ้าใส่ที่เก็บข้อมูล USB ขนาดใหญ่เครื่องเล่น MP3 MP3 หรือหนังสือของคุณเมื่อเสียบ Kindle


1

เมื่อฉันติดตั้งระบบเฝ้าระวังเล็ก ๆ กับ Raspberry Pi ซึ่งรันบน Raspbian Wheezy ฉันต้องย้ายไฟล์ทั้งหมดจากโฟลเดอร์ FTP ที่อัปโหลดโดยกล้อง IP อยู่ตลอดเวลา ดังนั้นฉันจึงเขียนสคริปต์ในโฮมไดเร็กตอรี่ (~) และเรียกมันว่า cron หนึ่งครั้งต่อนาที

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

move_images_to_usb เป็นสคริปต์ทุบตีธรรมดาฉันไม่ได้เขียนสคริปต์ก่อนหน้านี้ในทุบตี แต่ ...

#!/bin/bash

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

เมื่อเสียบไดรฟ์ usb ชื่อ sda1 (ไดรฟ์อื่นจะเป็น sdb1 ดังนั้นจึงไม่ทำงาน)


0

ฉันใช้โปรแกรมจำลองข้อมูลจาก Karenware เธอเป็นผู้เขียนโปรแกรมที่มีประโยชน์ขนาดเล็กจำนวนมากสำหรับ Windows (คิดว่า PowerToys ตั้งแต่ช่วงต้นของ W98 / W2K / XP วันแรก)

นี่คือลิงค์ http://www.karenware.com/powertools/ptreplicator.asp

ตั้งค่าตามกำหนดเวลากลางคืน หากเสียบไดรฟ์ USB แล้วจะซิงค์โฟลเดอร์ดาวน์โหลดกับเนื้อหา USB

แจกฟรี!


ขอบคุณ; แต่ปัญหาของฉันไม่ใช่ตัวสำเนา (มันเป็นเพียงไฟล์จำนวนมากที่อยู่ในไดเรกทอรีเดียว) แต่การทำสำเนานี้เกิดขึ้นในเวลาที่เหมาะสม ภารกิจตามกำหนดเวลาเป็นสิ่งที่ดี แต่ก็ไม่ใช่สิ่งที่ฉันกำลังมองหา
daphshez

0

นี่คือหัวข้อเก่า แต่ฉันคิดว่าฉันจะปูนี้ที่นี่สำหรับทุกคนที่ต้องการมัน เปลี่ยนข้อมูลที่เกี่ยวข้องให้เหมาะกับความต้องการของคุณแล้วมันจะทำทุกอย่างให้คุณ มอบเครดิตให้แก่/superuser//users/232313/tylerที่ทำซ้ำครั้งแรกของสิ่งนี้

@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
)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.