用法

用法

我正在帮助我的女朋友举办一场活动,她必须将大约 1,000 个装有相同文件的 USB 闪存驱动器加载其中。

这是一个相当小的文件(只有几 MB),但繁琐的部分实际上是复制文件。

有没有办法在插入 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 光盘上完成所有这些操作而无需安装,但您需要检查 pen-drives 的安装位置并在必要时修改脚本;另外我不确定是否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

这些数字可能不可靠。如果你插入同一根棍子两次,就会计算两次。

相关内容