我希望在插入光盘时自动将内容从光盘复制到指定目录。这不是 DVD 或 CD,只是每张光盘上都有一个数据文件,是否可以使用 shell 脚本来实现这一点?
答案1
是的!我对此很感兴趣,所以花了不少心思,咬牙切齿,扯头发。下面是:
#! /bin/bash
# Wait for a CD to be inserted then copy the contents
#
echo "CD copy, press <ctrl>C to exit"
echo "Looking for disk..."
#
# Go into a continuous loop always looking for a new CD
while :
do
####### Get the mount point of /dev/sr0 out of the mounts file
TEST=$(grep /dev/sr0 /proc/self/mounts)
####### If it doesn't exist, loop until it does with 1 second pause
if [ "$TEST" == "" ]; then
echo -ne "."
sleep 1
else
echo
############### Got it! Need to strip the mount point out of the string
TEST2=${TEST:9}
set $TEST2
TEST=$1
############### Do the copy process for the disk we found
echo "Copying from $TEST"
cp -vr $TEST/* ~/junk/
############### Eject the CD with suitable pauses to avoid any buffer problems
sleep 1
eject cdrom
sleep 2
fi
######## Still looping! Go back and wait for another CD!
done
exit()
您会注意到,该脚本假设 cdrom 是 /dev/sr0,因此如果不是这种情况,您需要更改它。使用 blkid 命令找出您的光学设备的名称。该脚本将所有内容复制到名为 junk 的子目录中的主文件夹中,并且此目录必须存在在运行脚本之前。
我发现脚本在复制数据后可以很好地弹出 cd/dvd。如果它没有弹出并保持挂载状态,我认为它会尝试再次复制同一张磁盘。除此之外,它相当不言自明。 享受 :-)
答案2
如果您想在插入 DVD/CD 时做出反应,则需要编写 udev 规则。
您可以找到说明这里
查看在特定事件上运行程序。
在 中使用udev
规则/etc/udev/rules.d
。
首先通过执行 . 插件来识别设备,tail -f /var/log/dmesg
然后删除以识别您的设备。
然后udevinfo
在设备上使用以查找有关的详细信息(您将在编写规则时使用)
添加新规则文件 /etc/udev/rules.d/90_CD_DVD.rules
使用来自的信息udevinfo
仅在您的设备上进行过滤。在action
新规则的字段中写入命令cp /path-to-your-cd-dvd /path-to-save-your-files
答案3
cp 源文件 目标文件
cp /Documnets/letter.txt /Pictures/letter.txt