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  [email protected]    [email protected]    [email protected]
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
[email protected]
http://linux-bulgaria.org/mailman/listinfo/lug-bg

Reply via email to