Каталогизатор CD/DVD дисков
Сделал себе каталогизатор. Требует для работы systemd, tree, udevil
UPD: tree можно заменить командой ls -aRGlhv
#!/bin/bash
set -e
pause_cd() {
eject -t
i=0
until [[ $insert_cd -ne 0 ]]
do
insert_cd=`udisksctl info -b /dev/sr0 | grep Size: | awk '{ print $2 }'`
sleep 1
i=$((i+1))
echo -n $i" "
done
echo
}
create_tree() {
f=`df | grep sr0 | awk -F"% " ' { print $2 }'`
vr=`ls -lhGg --time-style="long-iso" $( dirname $( df | grep sr0 | awk -F"% " ' { print $2 }' )) | grep $( basename $( df | grep sr0 | awk -F"% " ' { print $2 }' )) | awk '{ print $4,$5 }'`
echo -e "Новая метка тома: $nnnn" | tee tmp
echo -e "Старая метка тома: $old" | tee -a tmp
echo -e "Время создания: $vr \n\n" | tee -a tmp
# cat tmp
razmer=`du -hd0 "$f"`
echo "[ "$razmer | sed 's/ \//\] \//g' >> tmp
tree -h "$f" | sed '1d' >> tmp
if [[ "$arhivate" == "yes" ]]
then
find "$f" -name "*.tar.*" -exec printf '\n%.0s' {1..3} >> tmp \; -exec echo "{}" >> tmp \; -exec tar tvf "{}" >> tmp \;
find "$f" -regex '.*\.\(zip\|rar\|7z\|arj\|cab\|chm\|wv\)' -exec printf '\n%.0s' {1..3} >> tmp \; -exec 7z l {} >> tmp \; # -exec sed -i '/^7-Zip/,/^--$/d' tmp \;
fi
sed -r -i '/7-Zip/,/^--$/d' tmp
not_rewrite
mv tmp "`echo $nnnn`.list"
if [[ $nl == "all" ]] ; then cat "$nnnn.list" ; fi
}
not_rewrite() {
rewr=0
tname="$nnnn"
while [[ -f $nnnn.list ]]
do
rewr=$(($rewr+1))
tname=$tname"___"$rewr
if [[ ! -f $tname.list ]]
then
nnnn=$tname
else
tname=$nnnn
fi
done
}
rename_list() {
echo "Имя списка: $nnnn.list"
if [[ -z "$na" ]]
then
echo "Введите новое, или оставьте поле пустым:" ;
read r ;
else
validate=`echo $nnnn | tr '[:upper:]' '[:lower:]'`
echo "Validate name: $validate"
if [[ $validate == *k3b* ]]
then
echo "Введите иное или подтвердите, нажав Enter:" ;
read r ;
fi
fi
if [ "$r" ]
then
nnnn="$r"
not_rewrite
echo "Список переименован..."
echo "Было: $old.list Вы ввели: $r, записалось $nnnn.list"
mv "$old.list" "$nnnn.list"
else
echo "Saved as $nnnn.list"
fi
}
eject_disc() {
udevil umount /dev/sr0
eject
echo "мы дошли до eject"
}
ME=`basename $0`
print_help() {
cat <<EOF
Дополнительные опции
Использование: $ME [-t|-u][-s] | [-d][-a][-l]
Параметры:
-t Опция ISO9660 (может понадобиться для некоторых дисков)
-u Опция UDF (может понадобиться для некоторых дисков)
-s Монтирование в директорию /media/iso (нужен для томов с кириллицей и пробелами в названии. Права на директорию 0755 для Users ).
-d По-умолчанию. Без опций.
-a По-умолчанию yes на вопросы.
-l Выводить на экран содержимое готового .list
-r Парсить архивы. Поддержка rar,7z, и, под вопросом, zip - в будущих версиях
-h Справка
-v Версия программы
EOF
exit 0
}
boolean="0"
while getopts "tusdlahrv" "opt" ;
do
case "$opt" in
t) nt="-t iso9660"
echo "Опция: -t iso9660"
pause_cd
boolean="1" ;;
u) nt="-t udf"
echo "Опция: -t udf"
pause_cd
boolean="1"
;;
s) nm="/media/iso"
echo "Монтируем в точку $nm"
pause_cd
boolean="1" ;;
h) print_help
;;
d) echo "По умолчанию. Без опций"
pause_cd
boolean="1"
;;
a) echo "Вопросов не будет..."
na="all"
boolean="1"
;;
l) echo "По завершении увидите готовый список"
nl="all"
boolean="1"
;;
r) echo "Будем парсить архивы: tar,rar,7z,chm,arj,zip"
arhivate="yes"
boolean="1" ;;
v) cat <<-EOF
********* Каталогизатор v2.01.3 *********
************** for udisks2 **************
************** 07 июля 2016 *************
2a01.3 (07 июля 2016):
Переделаны бинарные операторы 'IF'
Добавлен парсер архивов.
В опцию '-a' добавлено "умное имя"
2a01.4 (04 августа 2016):
Добавлена поддержка архива .wv
EOF
exit 0
;;
*) print_help
;;
esac
done
if [[ $boolean == "0" ]] ; then print_help ; fi
if [[ ! $( mount | grep sr0 ) ]]
then
echo "Монтируем... $nt $nm" ;
udevil mount $nt /dev/sr0 $nm ;
fi
nnnn="`udisksctl info -b /dev/sr0 | grep IdLabel: | awk -F "IdLabel:" '{ print $2 }' | sed 's/ .//g' | sed 's/^-//g'`"
if [[ -z "$nnnn" ]]
then
nnnn=`echo $( isoinfo -i /dev/sr0 -d | sed '/Volume id: /!d' | sed 's/Volume id: //g')`
echo "isoinfo -i"
fi
old=$nnnn
create_tree
if [[ "$na" == "all" ]]
then
eject_disc ;
rename_list ;
else
echo "Ваш диск был вставлен, вынуть ?"
read "r"
case "$r" in
y|Y|д|Д|""|н|Н) echo "Вынимаем..." ;
eject_disc ;
rename_list ;
;;
n|N|т|Т) echo "Выходим..." ;
rename_list ;
;;
esac
fi
exit 0
UPD: tree можно заменить командой ls -aRGlhv