cp 源文件 目标文件

cp 源文件 目标文件

我希望在插入光盘时自动将内容从光盘复制到指定目录。这不是 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

相关内容