Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

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


 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.