The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Помогите сделать скрипт"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Помогите сделать скрипт"  +/
Сообщение от nessptz (ok) on 23-Ноя-10, 15:14 
Доброго времени суток, Господа линуксоиды!
Требуется помощь по написанию скрипта, задали в универе, сам в них не силён и времени разбираться нет.

Задание:

Сценарий обрабатывает, поступающий ему на стандартный ввод плейлист и удаляет несуществующие или недоступные файлы. Результат выдаётся на стандартный вывод.

$ cat xmms.m3u
#EXTM3U
#EXTINF: LINKIN PARK - IN THE END.MP3
#EXTINF: LINKIN PARK - PAPERCUT.MP3
#EXTINF: LINKIN PARK - NUMB.MP3

$ls

IN THE END.MP3
NUMB.MP3

$./myscript.sh < xmms.m3u
#EXTM3U
#EXTINF: LINKIN PARK - IN THE END.MP3
#EXTINF: LINKIN PARK - NUMB.MP3

Заранее благодарен за помощь!

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Помогите сделать скрипт"  +/
Сообщение от edd email on 23-Ноя-10, 16:07 
>[оверквотинг удален]
> #EXTINF: LINKIN PARK - PAPERCUT.MP3
> #EXTINF: LINKIN PARK - NUMB.MP3
> $ls
> IN THE END.MP3
> NUMB.MP3
> $./myscript.sh < xmms.m3u
> #EXTM3U
> #EXTINF: LINKIN PARK - IN THE END.MP3
> #EXTINF: LINKIN PARK - NUMB.MP3
> Заранее благодарен за помощь!

Мне конечно не жалко, и поэтому я дам вам скрипт, но все же, если вы собираетесь связать свою жизнь с IT, то настойчиво вам рекомендую найти время и начать учить bash, тем паче что он совсем не сложный.

Вот ваш скрипт:

#!/bin/bash
#
CHE="#EXTINF"
while read LINE
do
CH=`echo "$LINE"|awk '{split($0,a,": "); print a[1]}'`
if [ "$CH" == "$CHE" ]
    then
        NAME=`echo "$LINE"|awk '{split($0,a,": "); print a[2]}'`
            if [ -a "$NAME" ]
                then
                rm -f "$NAME"
                echo "Файл $NAME был удален"
                else
                echo "Файла $NAME не существует"
            fi
fi
done < $1

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Помогите сделать скрипт"  +/
Сообщение от Edd email(ok) on 23-Ноя-10, 20:44 
Похоже я с утра не правильно понял задачу, и скрипт наоборот удалял те файлы которые в плейлисте есть, а которых нет оставлял, ну да ладно, вот, точно то что вам надо, проверяет плейлист, если файл есть и доступен на чтение он его оставит, если файла нет или он не доступен на чтение, он его удаляет.

#!/bin/bash
#
ls -1 *.MP3 >> tmp
CHE="#EXTINF"
while read LINE1
do
COUNTER=0
    while read LINE
    do
    CH=`echo "$LINE"|awk '{split($0,a,": "); print a[1]}'`
        if [ "$CH" == "$CHE" ]
            then
                NAME=`echo "$LINE"|awk '{split($0,a,": "); print a[2]}'`
                if [ "$LINE1" == "$NAME" ]
                then
                    COUNTER=$[$COUNTER+1]
                fi
        fi
    done < $1

    if [ "$COUNTER" -ge 1 ]
    then
        echo "Файл $LINE1 в плейлисте и существует"
        if [ -r "$LINE1" ]
        then
            echo "Файл $LINE1 доступен"
        else
            rm -f $LINE1
            echo "Файл $LINE1 был не доступен для чтения"
        fi
    else
        rm -f $LINE1
        echo "Файл $LINE1 не в плейлисте и удален"
    fi
done < tmp

rm -f tmp

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Помогите сделать скрипт"  +/
Сообщение от nessptz (ok) on 24-Ноя-10, 10:19 
Огромное спасибо!!
Даже не думал что так скоро помогут)

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Помогите сделать скрипт"  +/
Сообщение от pavlinux (ok) on 27-Ноя-10, 21:38 
>  если файла нет ......, он его удаляет.

Вау. Параненормальные явления 3.
Автор наверно имел ввиду удаляет из плейлиста. (ака не выводит на stdout)

awk '{split($0,a,": "); print a[1]}'`  толсто.
cut -d: -d' ' -f2-


Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

6. "Помогите сделать скрипт"  +/
Сообщение от Edd email(ok) on 27-Ноя-10, 23:15 
>>  если файла нет ......, он его удаляет.
> Вау. Параненормальные явления 3.
> Автор наверно имел ввиду удаляет из плейлиста. (ака не выводит на stdout)
> awk '{split($0,a,": "); print a[1]}'`  толсто.
> cut -d: -d' ' -f2-

Автор сделал то, что просил его другой автор, и попробуйте прочитать всю фразу целиком, а не выдернув из контекста пару слов, сразу начинать снимать новый фильм.
По поводу awk или cut... Мне больше нравиться awk, вам похоже сut, так вот пользуйтесь им дальше на здоровье.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Помогите сделать скрипт"  +/
Сообщение от pavlinux (ok) on 28-Ноя-10, 00:19 
>>>  если файла нет ......, он его удаляет.
>> Вау. Параненормальные явления 3.
>> Автор наверно имел ввиду удаляет из плейлиста. (ака не выводит на stdout)
>> awk '{split($0,a,": "); print a[1]}'`  толсто.
>> cut -d: -d' ' -f2-
> Автор сделал то, что просил его другой автор

Что он сделал???

done < $1  - это что за ....

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Помогите сделать скрипт"  +/
Сообщение от pavlinux (ok) on 28-Ноя-10, 00:56 
> Автор сделал то, что просил его другой автор, и попробуйте прочитать всю
> фразу целиком,

"Требуется помощь по написанию скрипта"

Про использование внешних программ, типа sed, awk, perl, не написано.
По этому cut тоже плохо :-P


#!/bin/sh
#
# Выводит список только тех файлов которые есть и в списке и на диске.
# А то ..., awk, sed, php.  ...тфу, дёрёвня! (c) Л&Г
# И "удалять несуществующие или недоступные файлы.", это к экстрасенсам

CHE="#EXTINF"
while read LINE <&0
      do
        [ "${CHE%LINE}" == "$CHE" ] && [ -f "${LINE##*\: }" ] && echo "${LINE##*\: }";
done


pavel@suse64:/tmp> ls -1
LINKIN PARK - 1.MP3
LINKIN PARK - 3.MP3
LINKIN PARK - 5.MP3
LINKIN PARK - 7.MP3
LINKIN PARK - NUMB.MP3
LINKIN PARK - PAPERCUT.MP3
test.sh
xmms.m3u

pavel@suse64:/tmp> ./test.sh < xmms.m3u
LINKIN PARK - PAPERCUT.MP3
LINKIN PARK - NUMB.MP3

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

9. "Помогите сделать скрипт"  +/
Сообщение от Edd email(ok) on 28-Ноя-10, 02:49 
>[оверквотинг удален]
> LINKIN PARK - 3.MP3
> LINKIN PARK - 5.MP3
> LINKIN PARK - 7.MP3
> LINKIN PARK - NUMB.MP3
> LINKIN PARK - PAPERCUT.MP3
> test.sh
> xmms.m3u
> pavel@suse64:/tmp> ./test.sh < xmms.m3u
> LINKIN PARK - PAPERCUT.MP3
> LINKIN PARK - NUMB.MP3

Эхх, вот и я не люблю когда люди излагают свои мысли в странной языковой форме, из-за этого и возникают все недопонимания.
В общем, изначально я так же как и вы подумал что автору необходимо чего-то там удалять, что находиться в неком списке. Но, немного обдумав его слова, я понял, что ему необходимо:

1. Прочитать каталог
2. Сравнить содержимое каталога и список в файле
3. Удалить все те файлы которые -
а. Не в списке
б. Те которые нельзя прочесть. Что под этим подразумевает автор, не совсем понятно. Но я предположил что Not readble то удаляем.
4. Так же просили как можно больше визуальной информации.

Учитывая, то, что автор не хочет сам учить bash, я предположил, что стоит написать все как можно проще и доступней, иначе преподаватель заподозрит и наши старания приведут автора на нелегкий путь исправления.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Помогите сделать скрипт"  +/
Сообщение от pavlinux (ok) on 28-Ноя-10, 04:01 
> В общем, изначально я так же как и вы подумал что автору
> необходимо чего-то там удалять, что находиться в неком списке.
> Но, немного обдумав его слова, я понял, что ему необходимо:
> 1. Прочитать каталог
> 2. Сравнить содержимое каталога и список в файле

Я понял так, что нужна приблуда которая обновляет плейлист.
То есть читает существующий, проверяет наличие и пишет в stdout,
если файл на месте, иначе молчит.

Ладно, хрен с ним, видимо уже зачёт сдал и спит спокойно. :)

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Помогите сделать скрипт"  +/
Сообщение от nessptz (ok) on 06-Дек-10, 02:20 
Заглянул щас в тему случайно, заметил интересное обсуждение, решил отписаться.

Собственно в bash немного разобрался, скрипт написал свой(привожу ниже), зачёт ещё не сдал))) там куча чего другого надо помимо баша


ness@ness ~/Рабочий стол/bash $ cat myscript.sh
#!/bin/bash
#
echo "#EXTM3U" > new_play_list.m3u
ls -1 *.mp3 >> tmp
cat |
while read line
do
cat tmp | while read line2    
do
if [ "$line" == "$line2" ]
then
echo "$teg" >> new_play_list.m3u
echo "$line" >> new_play_list.m3u
fi
done
teg=$line
done
rm -f tmp
cat new_play_list.m3u | while read line    
do
echo $line
done

ness@ness ~/Рабочий стол/bash $ cat pl.m3u
#EXTM3U
#EXTINF:,FAINT.mp3
FAINT.mp3
#EXTINF:,IN THE END.mp3
IN THE END.mp3
#EXTINF:,NUMB.mp3
NUMB.mp3
#EXTINF:,ONE STEP CLOSER.mp3
ONE STEP CLOSER.mp3

ness@ness ~/Рабочий стол/bash $ ls
IN THE END.mp3  myscript.sh  ONE STEP CLOSER.mp3  pl.m3u

ness@ness ~/Рабочий стол/bash $ ./myscript.sh < pl.m3u
#EXTM3U
#EXTINF:,IN THE END.mp3
IN THE END.mp3
#EXTINF:,ONE STEP CLOSER.mp3
ONE STEP CLOSER.mp3

Собственно возникла проблема в том что оказывается при таком способе запуска скрипта, я имею в виду перенаправление плейлиста тем способом что указан выше, я не могу изменить его, тобишь удалить и записать его по новой, по причине того что никак не могу узнать его имя, поузнавал оказывается что это вобще не осуществимо.

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

5. "Помогите сделать скрипт"  +/
Сообщение от pavlinux (ok) on 27-Ноя-10, 21:40 
.
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру