среда, 25 мая 2016 г.

Каталогизатор CD/DVD дисков

Сделал себе каталогизатор. Требует для работы systemd, tree, udevil

#!/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

Комментарии: 0:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.

Подпишитесь на каналы Комментарии к сообщению [Atom]

<< Главная страница