Иногда возникает необходимость выбрать один звуковой файл (для звуковой схемы, например) из директории, в которой находятся несколько файлов. Для этого нужно их последовательно прослушать с интервалом, скажем, 3 секнды.
Не могу найти способ написания цикла по такой схеме:
1. Нашли файл в директории
2. Выполнили над ним действие (прослушали , заснули на 3 сек)
3. шаг 1, но уже ищем далее - следующий файл
Как такой цикл реализовать на bash?
последовательное прослушивание файлов в директории
Модератор: Модераторы разделов
-
TechnoMag
- Сообщения: 298
- ОС: Debian 8.0 Jessie
-
Ariasp
- Сообщения: 254
- Статус: NixLander
Re: последовательное прослушивание файлов в директории
-
TechnoMag
- Сообщения: 298
- ОС: Debian 8.0 Jessie
Re: последовательное прослушивание файлов в директории
Хотелось бы вот так. Но почему-то не получается.
Код: Выделить всё
#!/bin/sh
# play all files in directory
#directory="$1"
extention="$1"
timeout="$2"
#cd $directory
for Name in `ls -1 $extention`
do
play "$Name"
sleep $timeout
done
echo "End of directory"-
rm_
- Сообщения: 3340
- Статус: It's the GNU Age
- ОС: Debian
Re: последовательное прослушивание файлов в директории
Вот так будет проще:
Код: Выделить всё
find -name \*.mp3 -exec bash -c "play \"{}\"; sleep 3;" \;-
TechnoMag
- Сообщения: 298
- ОС: Debian 8.0 Jessie
Re: последовательное прослушивание файлов в директории
вместо *.mp3 и 3 (sleep) нужно вводить как аргументы командной строки.
Пробовал во всех предложеных вариантах.
Останавливается после проигрывания первого файла.
Пробовал во всех предложеных вариантах.
Останавливается после проигрывания первого файла.
-
rm_
- Сообщения: 3340
- Статус: It's the GNU Age
- ОС: Debian
Re: последовательное прослушивание файлов в директории
Код: Выделить всё
find -name "$1" -exec bash -c "play \"{}\"; sleep $2;" \;...в шелл-скрипте, не работает?
-
Ariasp
- Сообщения: 254
- Статус: NixLander
Re: последовательное прослушивание файлов в директории
TechnoMag писал(а): ↑26.09.2008 13:45Хотелось бы вот так. Но почему-то не получается.
Код: Выделить всё
#!/bin/sh # play all files in directory #directory="$1" extention="$1" timeout="$2" #cd $directory for Name in `ls -1 $extention` do play "$Name" sleep $timeout done echo "End of directory"
убери ключ l у ls
-
Black
- Сообщения: 1104
- ОС: ArchLinux
Re: последовательное прослушивание файлов в директории
А так не пойдёт:
Опция -s - время задержки. В качестве аргумента передаётся суффикс файлов. Работает так:
скрипт -s 3 wav
Код: Выделить всё
#!/bin/sh
while getopts "s:" Option
do
case $Option in
s) sleeptime=$OPTARG;;
esac
done
shift $(($OPTIND - 1))
[[ -z $sleeptime ]] && sleeptime=1
for i in *.$1
do
echo "$i"
mplayer "$i" > /dev/null
sleep $sleeptime
done
exitОпция -s - время задержки. В качестве аргумента передаётся суффикс файлов. Работает так:
скрипт -s 3 wav
Компьютер служит для решения тех проблем, которых до изобретения компьютера не существовало
-
TechnoMag
- Сообщения: 298
- ОС: Debian 8.0 Jessie
Re: последовательное прослушивание файлов в директории
Black писал(а): ↑26.09.2008 17:03А так не пойдёт:
Код: Выделить всё
#!/bin/sh while getopts "s:" Option do case $Option in s) sleeptime=$OPTARG;; esac done shift $(($OPTIND - 1)) [[ -z $sleeptime ]] && sleeptime=1 for i in *.$1 do echo "$i" mplayer "$i" > /dev/null sleep $sleeptime done exit
Опция -s - время задержки. В качестве аргумента передаётся суффикс файлов. Работает так:
скрипт -s 3 wav
Класс!!! Спасибо большое!
-
TechnoMag
- Сообщения: 298
- ОС: Debian 8.0 Jessie
Re: последовательное прослушивание файлов в директории
Расшифруйте пожалуйста строки:
Код: Выделить всё
shift $(($OPTIND - 1))
[[ -z $sleeptime ]] && sleeptime=1