我正在帮助我的女朋友举办一场活动,她必须将大约 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
这些数字可能不可靠。如果你插入同一根棍子两次,就会计算两次。