Я относительно новичок в Linux, перейдя с Windows на безголовый медиацентр. Я использую KODIBuntu.
Я пытаюсь создать автоматизированную систему копирования для резервного копирования моей коллекции печатных носителей. Мне нравится концепция Linux: «Если вы можете мечтать об этом, вы можете воплотить это в жизнь».
Я стремлюсь добиться того, чтобы диск вставлялся в привод, а сценарий копировал содержимое на мой привод.
например, диск вставлен -> тип носителя определен -> правильный запуск сценария копирования
Я использовал множество полезных веб-страниц через поиск Google, чтобы создать скрипты, которые сами выполнят работу по копированию. Я много читал, и мне указали на использование «HAL»... Затем я обнаружил, что его функция устарела и заменена на udev. Я еще много прочитал и узнал, как использовать UDEV, и создал следующее правило, которое, как я доказал, работает, связав его напрямую со скриптом копирования.
ACTION=="change", SUBSYSTEMS=="scsi", KERNEL=="s[rg][0-9]*", ATTRS{vendor}=="TSSTcorp", MODE="0660", GROUP="optical", RUN+="/home/jlivin25/myscripts/DiscTypeTest.sh"
Я понял, что мне нужен промежуточный сценарий, который бы выполнял «работу» по определению типа оптического носителя. Дальнейшее чтение привело меня к мысли, что мне нужно будет использовать какое-то выражение «ЕСЛИ».
ЕСЛИ диск вставлен, то, ЕСЛИ аудио компакт-диск, запустите сценарий копирования 1, ЕСЛИ DVD запустите сценарий копирования 2, ЕСЛИ blu-ray запустите сценарий копирования 3, ИНАЧЕ компакт-диск не вставлен
Я еще немного погуглил и нашел код в разных местах, который использует для работы переменные окружения. Однако из дополнительной информации в Google видно, что эти переменные не определены, пока на них не ссылается UDEV?
Мой обычный подход состоит в том, чтобы построить строку кода, запустить в терминале, и если я получу то, что хочу, тогда я соберу все строки вместе в сценарии оболочки?
Код, над которым я работаю, приведен ниже. Я подумал, что логически, если бы я мог заставить скрипт выводить то, что, по его мнению, находится на диске, в файл / журнал, то половина битвы была бы выиграна, и я мог бы просто заменить это местонахождением скрипта, который выполнял бы соответствующую задачу копирования. , есть идеи, почему это не работает так, как я хочу?
Я использовал эти страницы для получения информации от:
- https://pathar.tl/blog/the-ultimate-automated-ripping-machine/
- https://askubuntu.com/questions/359855/how-to-detect-insertion-of-dvd-disc
вот мой код:
#!/bin/bash
#
set -eu
#
# code below is derived from work by JimVanns, thanks
# https://github.com/jvanns/htpc/blob/master/dsc-trg-q
#
#
###########################################################################
### DEFINE VARIABLES HERE ###
### $HOME DOES NOT NEED DEFINING AS IT SEEMS TO BE BUILT INTO BASH FROM ###
### WHAT POSTS I HAVE READ RELATING TO USING WHAT I THINK ARE UDEV ###
### ENVIRONMENTAL VARIABLES E.G. $ID_CDROM_MEDIA_CD DO NOT APPEAR TO ###
### NEED DEFINING THEMSELVES, ALSO PART OF BASH OR LINUX COMMAND ###
### STRUCTURE CALLED BY BASH? ###
###########################################################################
#
MEDIA=
#
##############################################################################
### LEFT IN SO AS TO ALTER AS LITTLE AS POSSIBLE, I HAVE READ THAT DELAYS ###
### OFTEN IRON OUT KINKS IN CODE, PLUS ALSO FOUND IT USEFULL TO ALLOW A ###
### SMALL DELAY FOR CD-DRIVE TO DO ITS THING AFTER PUTTING DISK IN ###
##############################################################################
#
sleep 2
#
mkdir -p $HOME/myscripts/scriptlogs
#
#
if [ "$ID_CDROM_MEDIA_BD" = "1" ]
then
MEDIA=bluray
(
echo "$MEDIA" >> $HOME/myscripts/scriptlogs/DiscTypeTest.log
) &
if [ "$ID_CDROM_MEDIA_DVD" = "1" ]
then
MEDIA=dvd
(
echo "$MEDIA" >> $HOME/myscripts/scriptlogs/DiscTypeTest.log
) &
elif [ "$ID_CDROM_MEDIA_CD" = "1" ]
then
MEDIA=cdrom
(
echo "$MEDIA" >> $HOME/myscripts/scriptlogs/DiscTypeTest.log
) &
fi