Запись большого числа файлов на болванки

Софт под Linux, разные программы, но только связанные с Linux

Модератор: /dev/random

Аватара пользователя
drakon
Сообщения: 211

Запись большого числа файлов на болванки

Сообщение drakon »

Скопилось музыки около 20 гигов и хочется слить это все на dvd. Как автоматизировать процесс?
Debian GNU/Linux 2.6.15
Спасибо сказали:
Аватара пользователя
VisualN
Сообщения: 213
ОС: Gentoo Linux

Re: Запись большого числа файлов на болванки

Сообщение VisualN »

Консольная писалка + Perl скрипт с этим должны справиться, правда писать придется самому :)
Nothing ever changes...
Спасибо сказали:
Аватара пользователя
Jinn
Сообщения: 698
Статус: Интересующийся бывалый прохожий

Re: Запись большого числа файлов на болванки

Сообщение Jinn »

Скопилось музыки около 20 гигов и хочется слить это все на dvd.

Всё на один диск???
Консольная писалка + Perl скрипт с этим должны справиться

Что-то сомневаюсь...
Don't trouble troubles until troubles trouble you!
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Запись большого числа файлов на болванки

Сообщение allez »

Jinn писал(а):
28.09.2005 08:59
Всё на один диск???
Консольная писалка + Perl скрипт с этим должны справиться

Что-то сомневаюсь...
На один диск, разумеется, все не войдет. Емкость одного слоя DVD - 4,7 Гбайт, так что даже двухстороннего и двухслойного диска будет недостаточно для 20 Гбайт информации. Что же до ваших сомнений насчет "консольной писалки и perl-скрипта", то их можно смело отбросить. В свое время мне не раз приходилось выполнять аналогичную работу, только пишущих DVD-дисководов тогда еще не было, писал на CD. Вполне хватало консольной писалки (cdrecord) и не perl-, а bash-скрипта, точнее, не скрипта даже, а командной строки.

P.S. Чтобы не быть голословным, покопался в своих кладовочках-запасниках и нашел-таки диск той машины, с которой я сливал информацию. Писал я их на CD в двух вариантах: без сохранения путей и с оным. Соответственно привожу две командные строки.

Код: Выделить всё

find /home/user/EXPORT/ -type f -name "*.mp3" > /tmp/filelist; declare -i LIMIT=681574400 NUMDIR=1 CURDIRSIZE=0; mkdir /tmp/forcd/cd`printf "%.4u" $NUMDIR`; while read FILE; do CURDIRSIZE=$CURDIRSIZE+`du -b "$FILE" | awk '{print $1}'`; if [ $CURDIRSIZE -ge $LIMIT ]; then NUMDIR=$NUMDIR+1; mkdir /tmp/forcd/cd`printf "%.4u" $NUMDIR`; CURDIRSIZE=0; fi; cp -v "$FILE" /tmp/forcd/cd`printf "%.4u" $NUMDIR`; done < /tmp/filelist; cd /tmp/forcd; for i in cd*; do mkisofs -v -J -R -o $i.iso $i && rm -rf $i; eject; read -p "Press <Enter> to continue"; cdrecord -v -eject dev=0,0,0 speed=16 $i.iso; done

Код: Выделить всё

 find /home/user/EXPORT/cdrom/ -type f -name "*.mp3" > /tmp/filelist; declare -i LIMIT=681574400 NUMDIR=1 CURDIRSIZE=0; mkdir /tmp/forcd/cd`printf "%.4u" $NUMDIR`; while read FILE; do CURDIRSIZE=$CURDIRSIZE+`du -b "$FILE" | awk '{print $1}'`; if [ $CURDIRSIZE -ge $LIMIT ]; then NUMDIR=$NUMDIR+1; mkdir /tmp/forcd/cd`printf "%.4u" $NUMDIR`; CURDIRSIZE=0; fi; echo "$FILE" | cpio -pvdm /tmp/forcd/cd`printf "%.4u" $NUMDIR`; done < /tmp/filelist; cd /tmp/forcd; for i in cd*; do mkisofs -v -J -R -o $i.iso $i && rm -rf $i; eject; read -p "Press <Enter> to continue"; cdrecord -v -eject dev=0,0,0 speed=16 $i.iso; done
Спасибо сказали:
Аватара пользователя
drakon
Сообщения: 211

Re: Запись большого числа файлов на болванки

Сообщение drakon »

Естественно, что не на один диск. Проблема в тои, как автоматически раскидать файлы на несколько дисков
allez можешь привести пример?
Debian GNU/Linux 2.6.15
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Запись большого числа файлов на болванки

Сообщение allez »

Оп-паньки, пока искал диск и сообщение редактировал, вы уже успели написать :). Надеюсь, вы все поняли, но если хотите, могу сделать приведенные мной строки более удобочитаемыми и даже снабдить некоторыми комментариями ;).
Спасибо сказали:
Аватара пользователя
drakon
Сообщения: 211

Re: Запись большого числа файлов на болванки

Сообщение drakon »

Спасибо огромнейшее!!!!! Все понятно
Поскольку основа заложенна, хотелось бы усложнить задачу и по возможности забивать каждый диск под завязку. Может есть идея алгоритма?
Debian GNU/Linux 2.6.15
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Запись большого числа файлов на болванки

Сообщение allez »

Так в чем проблема? Я, собственно, именно эту задачу и решал. Просто присвойте переменной LIMIT нужное значение и вся любовь ;). В моем случае ее значение равно 681574400 байт (650 Мбайт), при записи DVD можно не мелочиться и от байт перейти к мегабайтам. Для этого нужно выставить LIMIT в 4800 (если вы поборник точности, то в 4812), а у команды du ключ -b заменить на -m и все дела. Далее этот скрипт (будем уж называть это скриптом, потешим мое самолюбие :)) составляет список файлов в указанном вами каталоге и потом файлы из этого списка раскидывает по подкаталогам /tmp/forcd/cd0001, /tmp/forcd/cd0002 и так далее. Затем уже происходит создание ISO-образов и запись их на болванки.

P.S. Если будете указывать значение переменной LIMIT в мегабайтах, то не жадничайте и напишите, скажем, 4700 вместо 4800 и уж тем более 4812. Дело в том, что из-за погрешности округления, неизбежно возникающей при работе du с ключом -m, вы можете создать образ, который не войдет на диск. Поэтому лучше уж работать с килобайтами, а еще лучше с байтами - во избежание... ;)
Спасибо сказали:
Аватара пользователя
drakon
Сообщения: 211

Re: Запись большого числа файлов на болванки

Сообщение drakon »

Проблема в том, что все рассортированно по исполнителям и соответствующие папки могут иметь рамер до 1 гига. Так же есть отдельные альбомы по 60-100МБ. В скрипте, есле я правильно понял, перебираются просто все файлы, без учета их размера. Поэтому может получится диск, на котором 4ГБ, т.к. следующии гиг уже не влазиет и еще один диск с 500МБ. Эти 500 можно было бы спокойно записать на первый диск
Debian GNU/Linux 2.6.15
Спасибо сказали:
Аватара пользователя
xorader
Сообщения: 1030
Статус: собирающий миры
ОС: Debian

Re: Запись большого числа файлов на болванки

Сообщение xorader »

Код: Выделить всё

cd /home; tar cf mp3.tar mp3; split -b 681574400 mp3.tar mp3.tar.; for ifile in `ls -1 mp3.tar.*`; do ( mkisofs ...;  cdrecord ...); done


:)
Molchanov Alexander (aka Xor)
*offtopic* - ololo!
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Запись большого числа файлов на болванки

Сообщение allez »

(drakon) писал(а):В скрипте, есле я правильно понял, перебираются просто все файлы, без учета их размера.
Нет, вы неправильно поняли. Чем, по-вашему, там du занимается? Правильно, вычислением размера отдельных файлов. И оба варианта скрипта забивают болванки "под завязку", только в одном случае файлы складываются в одну кучу, а во втором сохраняется исходная структура каталогов. При этом, правда, отдельные каталоги могут оказаться разбитыми между двумя болванками.

Для xorader:
Возможно, я и не прав, но мне показалось, что drakon хочет получить не только резервные копии музыкальных записей на DVD, но и иметь возможность еще и слушать их с этих самых DVD. Уважаемый drakon, если я все-таки не прав, воспользуйтесь советом, который дал xorader - это будет гораздо проще.
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Запись большого числа файлов на болванки

Сообщение allez »

По личной просьбе Thug привожу свой скриптик в более удобочитаемом виде:

Код: Выделить всё

find /home/user/EXPORT/ -type f -name "*.mp3" > /tmp/filelist # создаем список файлов для копирования
declare -i LIMIT=681574400 NUMDIR=1 CURDIRSIZE=0 # объявление целочисленных переменных, обозначающих максимальный размер каталога для записи, номер каталога и текущий его размер соответственно
mkdir /tmp/forcd/cd`printf "%.4u" $NUMDIR` # создаем каталог для записи вида "/tmp/forcd/cd0001"
while read FILE # начинаем заполнять этот самый каталог
do
  CURDIRSIZE=$CURDIRSIZE+`du -b "$FILE" | awk '{print $1}'` # по ходу действия подсчитываем текущий размер каталога
  if [ $CURDIRSIZE -ge $LIMIT ] # если этот размер равен или превышает максимальный...
  then
    NUMDIR=$NUMDIR+1 # ...увеличиваем номер каталога для записи на единицу...
    mkdir /tmp/forcd/cd`printf "%.4u" $NUMDIR` # ...создаем новый каталог...
    CURDIRSIZE=0 # ...обнуляем его текущий размер
  fi
  # копируем файл в каталог для записи. Это можно сделать двумя способами:
  cp -v "$FILE" /tmp/forcd/cd`printf "%.4u" $NUMDIR` # способ 1: без сохранения путей (файлы сваливаются в одну кучу)
  echo "$FILE" | cpio -pvdm /tmp/forcd/cd`printf "%.4u" $NUMDIR` # способ 2: с сохранением путей (файлы разложены по "родным" подкаталогам)
done < /tmp/filelist
cd /tmp/forcd # переходим к получившимся каталогам...
for i in cd* # ...и в каждом из них...
do
  mkisofs -v -J -R -o $i.iso $i && rm -rf $i # ...создаем iso-образ...
  eject # ...выдвигаем лоток дисковода...
  read -p "Press <Enter> to continue" # ...кладем туда болванку и жмем <Enter>...
  cdrecord -v -eject dev=0,0,0 speed=16 $i.iso # ...производим запись
done
Спасибо сказали: