Làm cách nào tôi có thể tự động sao chép tệp vào ổ USB khi tôi kết nối nó với máy tính của mình?


18

Tôi đang tìm giải pháp sao chép tất cả các tệp từ một thư mục cụ thể trên ổ cứng, sang một thư mục cụ thể trên thiết bị bộ nhớ USB, khi thiết bị này được kết nối.

Tôi có một chương trình tải các tập podcast cho tôi.

Tôi muốn các tệp này được tự động di chuyển (hoặc ít nhất là sao chép) vào máy nghe nhạc mp3 của tôi sau khi tôi kết nối nó với máy tính.

Tôi có cả máy windows xp và linux, vì vậy một giải pháp cho bất kỳ trong số chúng sẽ làm việc cho tôi.


2
Tôi cho rằng bạn không hài lòng với một đồng bộ hóa theo lịch trình?
Ivo Flipse

Câu trả lời:


23

Bạn hoàn toàn có thể dễ dàng xây dựng giải pháp của riêng mình cho Windows bằng autorun.inf và tệp .bat.

Tạo một tập tin bat để sao chép một thư mục vào ổ đĩa USB của bạn.

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

Đặt tệp bat trên máy nghe nhạc mp3 của bạn và tạo autorun.inf bằng các hướng dẫn sau

Bây giờ bạn nên có giải pháp xây dựng nhà riêng cho vấn đề của mình nhưng chắc chắn có thể có giải pháp được tạo sẵn ngoài đó :)


mẹo tuyệt vời !!!! +10
in.spite

1
Cảm ơn lời đề nghị. Autorun.inf phải là: [autorun] open = getpodcasts.bat action = sao chép podcast vào trình phát Ít nhất winxp sp2, điều này sẽ chỉ mở AutoPlayer, với "sao chép podcast mới vào trình phát" ở trên cùng. Tôi không nghĩ có cách nào để ghi đè lên điều này và buộc nó chạy kịch bản một cách im lặng. Ngoài ra, rõ ràng bạn phải bật AutoPlay. Có lệnh tôi cần bật trên cửa sổ thực sự là một sự quan trọng tuyệt vời, nhưng nó vẫn không chính xác như những gì tôi đang tìm kiếm.
daphshez

suy nghĩ tốt đẹp! :) +1

3
Không phải Microsoft vừa loại bỏ khả năng sử dụng tự động chạy trên ổ USB sao?
ale

10

Đối với Linux:

Nếu bạn không phiền một chút về kịch bản Python, bạn có thể viết một trình nền nghe HAL cho các sự kiện và sau đó khởi chạy một tập lệnh khi thiết bị bạn chọn đã được cắm. Một đoạn mã ví dụ sẽ như thế này :

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

Bạn chỉ cần sửa đổi device_added()chức năng để giới hạn nó vào thiết bị cụ thể và thay thế os.system()cuộc gọi bằng tập lệnh tùy chỉnh của bạn.

Để giới hạn nó vào ổ đĩa, volume.uuidtài sản có thể được sử dụng và một danh sách đầy đủ các thuộc tính có sẵn có thể được hiển thị cùng với hal-devicechương trình.

Để bắt đầu daemon khi khởi động, chỉ cần bắt đầu từ đó /etc/rc.local.


Tôi không thể xác minh xem đây có phải là một câu trả lời hay không, nhưng bạn xứng đáng nhận được sự ủng hộ cho những rắc rối một mình! Nhưng dù sao, tôi sẽ cố gắng và làm cho nó dễ dàng hơn một chút đối với những người không lập trình ở đây ;-) như tôi!
Ivo Flipse

9

Windows 7 và tự động đồng bộ hóa với thiết bị flash / USB của bạn khi chèn!

Tải xuống SyncToy và thiết lập tên ghép nối và tên thư mục của bạn ("SyncTest")

xem: Cách thực hiện: Sử dụng SyncToy để tạo một bản sao hàng đêm của Tài liệu của tôi

  • Chạy bảng điều khiển quản lý máy tính
  • Trình xem sự kiện / nhật ký windows / hệ thống
  • Tìm sự kiện chèn phương tiện truyền thông
    • Dịch vụ Dịch vụ Bộ đếm Thiết bị Di động đã vào trạng thái đang chạy. (Bạn có thể cần xóa nhật ký sự kiện và đẩy / nạp lại phương tiện để kích hoạt sự kiện nhật ký này)
  • Trong cửa sổ sự kiện phía trên, nhấp chuột phải vào sự kiện và chọn "Đính kèm tác vụ với sự kiện này"
  • Windows mở "Tạo cửa sổ tác vụ cơ bản"
  • Đặt tên cho nhiệm vụ của bạn và nhấn tiếp theo
  • Thông tin sự kiện đã được điền vào, tiếp theo
  • Hành động sẽ hiển thị "Bắt đầu một chương trình", tiếp theo
  • Trong cửa sổ Bắt đầu chương trình, duyệt đến SyncToyCmd.exe (hoặc ứng dụng đồng bộ hóa bạn đã chọn)
  • Thêm đối số. Nếu ghép nối dự phòng của bạn được gọi là SyncTest, hãy nhập "-RsyncTest". Không thêm dấu ngoặc kép, không thêm dấu cách sau dòng lệnh -R, SyncToy (hoặc có thể Windows 7) là trường hợp nhạy cảm để SyncTest không bằng synctest!
  • Tiếp theo, kết thúc

Bạn có thể chạy tác vụ ngay từ Trình lập lịch tác vụ để xác minh nó hoạt động. Bây giờ, vấn đề khác duy nhất tôi gặp phải là chạy máy tính xách tay bằng pin, trong Trình quản lý tác vụ trong tab điều kiện, bỏ chọn "Chỉ bắt đầu tác vụ khi máy tính bật nguồn AC", nếu không, tác vụ sẽ chỉ chạy khi cắm AC.

Ngoài ra, khi các cuộc thăm dò và ngắt kết nối / kết nối lại USB, tác vụ này sẽ chạy cứ sau vài phút, thực sự rất tuyệt, nó tự động đồng bộ hóa với USB HDD mọi lúc :)


2

Chỉnh sửa: hóa ra SyncBack SE có hành động kích hoạt:

Mở Hồ sơ, chuyển đến tab Khi Khi, sau đó, Chèn Chèn. Nó cho phép bạn chỉ định bằng ký tự ổ đĩa, nhãn hoặc số sê-ri.

Tuy nhiên, phiên bản SE không miễn phí và chỉ có Windows (tôi nghĩ)

Hoặc bạn có thể thử thêm sự kiện Autorun cho chương trình đồng bộ hóa của mình (ví dụ cho SyncToy) bằng TweakUI

  • Mở TweakUI
  • Truy cập vào máy tính của tôi -> autorun Từ> trình xử lý
  • Nhấp vào tạo
  • Tìm vị trí của Synctoy (tệp chương trình làm mặc định)
  • Nhấp đúp chuột vào biểu tượng trình khởi chạy chương trình
  • Chọn tất cả các nút radio phương tiện trong danh sách dưới đây.
  • Nhấp vào ok
  • Nhấn vào áp dụng.

  • Bây giờ cắm vào ổ bút của bạn.

  • Trong máy tính của tôi nhấp chuột phải vào ổ đĩa và chọn thuộc tính.
  • Nhấp vào tab tự động phát
  • Chọn nhạc từ menu thả xuống.
  • Nhấp vào nút radio Chọn hành động để thực hiện hành động
  • Bây giờ chọn đồng bộ hóa với logo SyncToy
  • Lặp lại cho các tùy chọn khác được đưa ra bởi menu thả xuống
  • Nhấn vào áp dụng rồi ok.
  • Xóa và lắp lại ổ đĩa của bạn để xem nó có hoạt động không

Tôi dường như không thể tìm thấy bất kỳ chương trình (khác) nào sẽ tự động bắt đầu khi bạn kết nối thiết bị USB của mình.

Tất cả đều dựa vào lịch trình để bắt đầu đồng bộ hóa. Bạn có thể quyết định để nó được lên lịch mỗi lần, nó sẽ thất bại nếu thiết bị USB không được kết nối và chạy nếu có.

Nhưng thành thật mà nói sẽ dễ dàng hơn nếu bạn chỉ cần nhấp vào nút đồng bộ hóa, bạn cũng phải cắm thiết bị USB theo cách thủ công.

Dù sao, tôi cũng tìm thấy một công cụ đồng bộ hóa chạy trên cả Linux và Windows: DirSync Pro hoàn toàn miễn phí, chạy trên Java và có GUI đẹp:

*  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
bạn có thể kết hợp điều này với một tác vụ được quy định bằng cách sử dụng các sự kiện kích hoạt mới trong Vista và Windows 7 để nó chạy khi thiết bị usb được kết nối.
Paxxi

1
Tôi nghĩ rằng giải pháp autorun được đề cập trong câu trả lời khác có thể thực hiện được mẹo
Ivo Flipse

Cũng như một ghi chú, tôi tin rằng các tính năng "on insert" là mới đối với SyncBack SE 5.
daphshez

1

Tôi đã thử phương pháp của Steven, nhưng sự kiện USB không hiển thị trong "Trình xem sự kiện / Nhật ký Windows / Hệ thống" (Tôi đang sử dụng Windows 7). Tôi chọc ngoáy một chút và phát hiện ra các sự kiện chèn USB được đặt trong "Nhật ký sự kiện / Nhật ký ứng dụng và Nhật ký dịch vụ / Microsoft / Windows / DriverFrameworks-UserMode / Toán tử". Trước tiên hãy thử xóa nhật ký (chỉ để dễ dàng tìm thấy sự kiện bạn muốn), sau đó lắp ổ flash USB. Làm mới nhật ký và một loạt các sự kiện sẽ xuất hiện. Tôi đã chọn sự kiện hàng đầu nhất (tức là gần đây nhất) và đã giao nhiệm vụ cho điều đó (đảm bảo mô tả sự kiện trông giống như có một cái gì đó cụ thể cho ổ USB cụ thể mà bạn đã chèn).

Tôi đã sử dụng chương trình SyncBack miễn phí để thực hiện đồng bộ hóa thực tế. Hoạt động tuyệt vời!


1

Tôi chỉ sử dụng AUTORUN.INF với một vài đợt để đồng bộ các thư mục chính. Rất đơn giản rất hiệu quả.

Ngoài ra, nếu bạn chỉ đọc, lưu trữ autorun.inf lưu trữ tệp virus dính USB cứng của nó


1

Bạn chỉ đơn giản là quên ""và kết thúc ".\dectory\" ← Điều đó cũng kết thúc \.

Công thức bó ban đầu hoạt động, Chỉ là ngày nay, Có rất nhiều khoảng trắng trong thư mục, tệp bó và dấu nhắc lệnh HATE những cái đó.

Tôi trông như thế nào:

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

1

Trong Linux, thay vì có một chương trình chạy liên tục để lắng nghe các sự kiện, bạn có thể sử dụng các chương trình đã chạy. Bạn có thể thêm một số hook vào udev để gắn thiết bị vào một vị trí tạm thời và sau đó khởi chạy rsync để đồng bộ hóa một loạt các thư mục.

Bằng cách này, bạn có thể xác định các hành động cụ thể theo chữ ký thiết bị của mình: đồng bộ hóa tài liệu công việc của bạn khi một phím cụ thể được chèn hoặc nhạc của bạn nếu một máy nghe nhạc MP3 lưu trữ hàng loạt USB được cắm hoặc sách của bạn khi cắm Kindle ở đó.


1

Khi tôi đang thiết lập hệ thống giám sát nhỏ với Raspberry Pi, chạy trên Raspbian Wheezy, tôi cần liên tục di chuyển tất cả các tệp từ thư mục FTP được camera IP tải lên. Vì vậy, tôi đã viết kịch bản trong thư mục nhà (~) và gọi nó một lần một phút với cron

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

move_images_to_usb là tập lệnh bash thông thường, trước đây tôi không viết kịch bản, nhưng ...

#!/bin/bash

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

Khi ổ đĩa USB được chèn, tên sda1 của nó (một ổ đĩa khác sẽ là sdb1, vì vậy nó sẽ không hoạt động)


0

Tôi sử dụng một chương trình sao chép từ Karenware. Cô là tác giả của rất nhiều chương trình hữu ích nhỏ cho Windows (nghĩ rằng PowerToys từ những ngày đầu W98 / W2K / XP).

Đây là liên kết. http://www.karenware.com/powertools/ptreplicator.asp

Thiết lập nó trên một lịch trình hàng đêm. Nếu ổ USB được cắm, nó sẽ đồng bộ thư mục tải xuống với nội dung USB.

Nó miễn phí!


cảm ơn; nhưng vấn đề của tôi không phải là bản sao (nó chỉ là một tập tin nằm trong một thư mục), nhưng việc sao chép này xảy ra đúng lúc. Một nhiệm vụ theo lịch trình là tốt đẹp, nhưng không hoàn toàn những gì tôi đang tìm kiếm.
daphshez

0

Đây là một chủ đề cũ, nhưng tôi nghĩ rằng tôi sẽ pu nó ở đây cho bất cứ ai muốn nó. Thay đổi thông tin liên quan cho phù hợp với nhu cầu của bạn, sau đó nó sẽ làm tất cả cho bạn. Tín dụng cho /superuser//users/232313/tyler người thực hiện lần lặp đầu tiên này.

@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
)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.