用法

用法

我正在幫助我的女朋友舉辦一個活動,她必須用相同的文件加載大約 1,000 個 USB 隨身碟。

這是一個相當小的檔案(只有幾 MB),但繁瑣的部分實際上是複製檔案。

有沒有辦法在插入 USB 隨身碟時自動將檔案複製到 USB 隨身碟?這將使她的工作變得非常輕鬆。

我的桌面作業系統是 Windows 10,但我也可以存取 Linux。我甚至不會反對為 Linux 編寫 bash 腳本,如果那樣更容易的話。

答案1

在 Ubuntu 16.04 上,USB 隨身碟安裝在 中/media/$USER/LabelName,但可以在不知情的情況下處理檔案複製。一個粗略的腳本是:-

#!/bin/bash
while sleep 1
do  [ -e /media/$USER/*/TheFile ] || cp TheFile /media/$USER/*/
    umount umount /media/$USER/*
    xmessage -center -timeout 3 "File copied - change disc"
done

這只是為了展示原理。您需要做的一件事是確保/media/$USER/在開始之前沒有安裝任何東西(除非您已經安裝了第一個驅動器)。您可以替換TheFile為參數或預設環境變量,但請確保它位於目前目錄中,這樣就沒有路徑,否則檢查其在磁碟機上是否存在將會失敗。

您也許可以在 Ubuntu Live 光碟上完成所有這些操作,而無需安裝,但是您需要檢查筆式驅動器的安裝位置,並在必要時修改腳本;我也不確定是否xmessage包含在 Live 光碟上,因此您可能需要安裝它,除非您使用其他方法來指示驅動器需要更改。

答案2

的延伸AFH的基本理念,假設您的 Linux 作業系統會自動安裝快閃磁碟機/media/$USER

#! /bin/bash

src="$1"
target="$(basename "$src")"
counter=0

copyTo() {
    sleep 0.3 # wait for drive to be fully mounted
    printf -v offset '%*s' $(( counter * 15 % ($(tput cols) - 15) ))
    echo "$offset Copy to $counter"
    cp "$src" "$1/$target"
    sync "$1"
    umount "$1"
    echo "$offset Unmounted $counter"
}

inotifywait -me create --format "%w%f" "/media/$USER" |
while IFS='' read -r drive; do
    ((++counter))
    copyTo "$drive" &
done

用法

  • inotifywait如果尚未安裝,請安裝。在 Ubuntu 上使用sudo apt install inotify-tools這樣做。
  • 設定您的檔案總管(例如 nemo 或 nautilus)以不是自動開啟安裝的磁碟機。umount如果檔案總管視窗顯示要卸載的磁碟機的內容,則可能會失敗。
  • 將腳本另存為autocopy.sh.
  • 使用使腳本可執行chmod u+x autocopy.sh
  • 使用啟動腳本./autocopy.sh '/path/to/file.ext'
  • 根據需要插入任意數量的 USB 隨身碟。該腳本會在磁碟機插入時偵測它們,將檔案複製到它們,然後卸載它們。
  • 完成後,點選CtrlC退出腳本。

輸出

該腳本在複製檔案之前和卸載磁碟機之後列印。相關訊息在同一層級縮排。

Copy to 1
Unmounted 1
               Copy to 2
                              Copy to 3
                              Unmounted 3
               Unmounted 2
                                             Copy to 4
                                             Unmounted 4

這些數字可能不可靠。如果將同一根棍子插入兩次,則算兩次。

相關內容