2007-12-29

cppl2f — bash-скрипт для копирования файлов из m3u-плейлиста

Вот написал небольшой скриптик. Копирует музыку из .m3u плейлиста на плеер. Входные параметры: сам плейлист и директория, куда кидаем музыку. Я использую в связке с exaile. Там у меня уже нагенерированы списки воспроизведения. Пример использования:

cppl2f playlist0000.m3u /media/KEEPMASS300/CONTENTS/MUSIC

cppl2f — название скрипта, брошенного в /bin. У вас все может называться по другому. Не забываем сделать файл исполняемым:
chmod +x cppl2f

Листинг скрипта с комментариями:
#!/bin/bash 
# cppl2f.sh
# Copy playlist to folder
# accept a playlist and a destination directory 
# copy the playlist files to the destination 

if [ -z "$1" ] || [ -z "$2" ] # if we don't have two args... 
then 
echo "usage: $0 playlist.m3u destination_dir" 
else 
if [ -f "$1" ] # существует ли файл? 
then 
if [ -d "$2" ] # существует ли директория? 
then 
# читаем строки в плейлисте 
while read line 
do 
if echo "$line" | grep -q "^#" 
then 
 # пропускаем строки, начинающиеся с '#' 
 # т.к. они не несут полезной информации 
continue 
else 
#Процесс копирования
freespace=$(df $2 | awk '{print $4}' | sed 's/\([0-9]*\)\(.*\)/\1/')
filesize=$(du -k "$line" | sed 's/\([0-9]*\)\(.*\)/\1/')
if [ $freespace -gt $filesize ] #если места больше, чем размер файла, то копируем
then 
basename "$line" # вывод имени файла
cp "$line" "$2"  # копирование файла на плейер
fi
fi 
done < $1
echo "free space: $freespace Kb"
else 
echo "$2 isn't a valid destination directory." 
fi 
else 
echo "$1 isn't a playlist file." 
fi 
fi 

exit 0

2 комментариев: ответить

07.02.2009, 15:00   Programmaster комментирует...

/dev/sda1 там совершенно зря. df $2 сработает вполне корректно, показав состояние того раздела, который примонтирован в указанную директорию.
;)

07.02.2009, 17:20   Dr.AKULAvich комментирует...

Действительно :-)
Спасибо за совет.

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