Re: [Lug-bg] Баш цикли (беше Re: Batch Video Converter)
- Subject: Re: [Lug-bg] Баш цикли (беше Re: Batch Video Converter)
- From: Peter Pentchev <roam@xxxxxxxxxxx>
- Date: Mon, 15 Nov 2010 17:30:27 +0200
On Mon, Nov 15, 2010 at 03:43:58PM +0100, Ivo wrote:
> On 11/15/2010 08:50 AM, Peter Pentchev wrote:
> >On Mon, Nov 15, 2010 at 09:29:40AM +0200, Svetlin Nakov wrote:
> >>Колеги,
> >>
> >>Някой знае ли софтуер, който може да конвертира в batch режим множество
> >>видеофайлове от MPEG2 формат (от Mini-DV камера с PCM звук) към
> >>по-цивилизован формат, примерно XVid+AC3?
> >По принцип всеки софтуер, който може да бъде пуснат от команден ред и
> >да прекодира един файл, може да бъде убеден да прекодира повече от един
> >файл със shell script или batch файл (в зависимост от операционната
> >система ;). Например с mencoder можеш да направиш нещо като:
> >
> >for i in *.mpg; do
> > mencoder ...options... "$i" -o ../converted/"$i"
> >done
> >
> >...или, ако файловете ти са в повече от една директория:
> >
> >for i in `find . -type f -name '*.mpg'`; do
> > d=`dirname "$i"`
> > mkdir -p ../converted/"$d"
> > mencoder ...options... "$i" -o ../converted/"$i"
> >done
> >
> >А иначе самото прекодиране би трябвало да може да бъде направени или
> >с mencoder (от MPlayer), или с vlc, а сигурно има и други.
>
> Здравейте,
> Много ми хареса употребата на глагола убеждавам по-долу.
> А моят въпрос е свързна с баш циклите. Доста често убеждавам
> програми да свършат работа по много файлове с while, но пък доста
> често виждам примери с for.
> Да не би да има някаква врътка, която не знам?
В интерес на истината, употребата на for в случая е малко опасна,
ако човек не се е погрижил за IFS - файлове с интервали в имената
може да създадат интересни и шашави проблеми (добре де, да не бъдат
обработени правилно, че даже и изобщо, и да плюят съобщения за
грешки наляво-надясно). Ако говориш за употреба на while като:
find ... | while read f; do ...; done
...това е нещо, което и аз всъщност правя доста често, до голяма
степен именно заради малко по-сигурния начин на обработка на файлове
с интервали в имената (и се надявам да не попадна на едеотин, който
да е сложил символ за нов ред в името на файла). Основният недостатък
на list-generator | while read f; do ... done е, че когато цикълът
седи от дясната страна на pipe, той се изпълнява в subshell и не може
да променя стойности на променливи в "истинския" шел.
Това, разбира се, може да бъде заобиколено с нещо като:
tempfile=`mktemp foo.XXXXXX`
trap "rm -f -- \"$tempfile\"" EXIT HUP INT QUIT TERM
find ... > "$tempfile"
while read f; do ...; done < "$tempfile"
...но това се пише малко по-трудно ;)
Като цяло, всеки от вариантите си има предимства и недостатъци.
Поздрави,
Петър
--
Peter Pentchev roam@xxxxxxxx roam@xxxxxxxxxxx roam@xxxxxxxxxxx
PGP key: http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553
If there were no counterfactuals, this sentence would not have been paradoxical.
Attachment:
signature.asc
Description: Digital signature
_______________________________________________
Lug-bg mailing list
Lug-bg@xxxxxxxxxxxxxxxxxx
http://linux-bulgaria.org/mailman/listinfo/lug-bg
|