bash pętla zrywa się po dwóch przejsciach.

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
maly_wariat
Sędziwy Jeż
Sędziwy Jeż
Posty: 73
Rejestracja: 25 sie 2009, 21:41
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

bash pętla zrywa się po dwóch przejsciach.

Post autor: maly_wariat »

Mam taką pętle:

Kod: Zaznacz cały

#!/bin/bash
for folder in testowy1 testowy2
do
cd $folder
find ./ -maxdepth 1 -iname '*.mp4'|while read SRC; do
DST = "${SRC%%.[mM][pP]4}"
ffmpeg -i $SRC $DST.flv
n=$(date +%A-%d-%B-%y)
if [ -f $n ]; then
mv $DST.flv ./$n/$DST.flv
else
mkdir $n
mv $DST.flv ./$DST.flv
fi
done
cd ..
done
dlaczego pętla zrywa mi się po dwóch przebiegach?
Awatar użytkownika
kabanek
Zakręcona Traszka
Zakręcona Traszka
Posty: 592
Rejestracja: 23 cze 2009, 20:34
Płeć: Mężczyzna
Wersja Ubuntu: 13.10
Środowisko graficzne: Xfce
Architektura: x86_64
Kontakt:

Odp: bash pętla zrywa się po dwóch przejsciach.

Post autor: kabanek »

Kod: Zaznacz cały

#!/bin/bash
for folder in testowy1 testowy2
do
	cd $folder
	find ./ -maxdepth 1 -iname '*.mp4'|while read SRC; 
	do
		DST = "${SRC%%.[mM][pP]4}"
		ffmpeg -i $SRC $DST.flv
		n=$(date +%A-%d-%B-%y)
		if [ -f $n ]; then
			mv $DST.flv ./$n/$DST.flv
		else
			mkdir $n
			mv $DST.flv ./$DST.flv
		fi
	done
	cd ..
done
a czy przypadkiem tak nie wygląda DUŻO bardziej czytelnie?
Awatar użytkownika
maly_wariat
Sędziwy Jeż
Sędziwy Jeż
Posty: 73
Rejestracja: 25 sie 2009, 21:41
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: bash pętla zrywa się po dwóch przejsciach.

Post autor: maly_wariat »

Wygląda:) ale nie wnosi niczego nowego do tematu
find ./ -maxdepth 1 -iname '*.mp4'|while read SRC;
a tu masz błąd:)
zmodyfikowałem:

Kod: Zaznacz cały

#!/bin/bash
for folder in testowy1 testowy2
do
        cd $folder
        find ./ -maxdepth 1 -iname '*.mp4'|while read SRC; do
               DST = "${SRC%%.[mM][pP]4}
               ffmpeg -i $SRC -ar 22050 -acodec libmp3lame -ab 96k -vcodec flv -b 300k -g    150 -cmp 2 -subcmp 2 -mbd 2 -flags +aic+cbp+mv0+mv4 -trellis 1 $DST.flv
               n=$(date +%A-%d-%B-%y)
               if [ -f $n ]; then
                  mv $DST.flv ./$n/$DST.flv
               else
                  mkdir $n
                  mv $DST.flv ./$DST.flv
               fi
done
cd ..
done
i tym razem o co ?
FFmpeg version SVN-r19352-4:0.5+svn20090706-2ubuntu2, Copyright (c) 2000-2009 Fabrice Bellard, et al.
configuration: --extra-version=4:0.5+svn20090706-2ubuntu2 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --disable-stripping --disable-vhook --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --extra-cflags=-I/build/buildd/ffmpeg-0.5+svn20090706/debian/include --enable-shared --disable-static
libavutil 49.15. 0 / 49.15. 0
libavcodec 52.20. 0 / 52.20. 0
libavformat 52.31. 0 / 52.31. 0
libavdevice 52. 1. 0 / 52. 1. 0
libavfilter 0. 4. 0 / 0. 4. 0
libswscale 0. 7. 1 / 0. 7. 1
libpostproc 51. 2. 0 / 51. 2. 0
built on Oct 13 2009 22:15:16, gcc: 4.4.1
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x844e700]multiple edit list entries, a/v desync might occur, patch welcome

Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 59.94 (60000/1001)
Last message repeated 1 times
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './20091128-122043.mp4':
Duration: 00:00:10.28, start: 0.000000, bitrate: 349 kb/s
Stream #0.0(eng): Video: mpeg4, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 59.94 tbr, 300 tbn, 1k tbc
Stream #0.1(eng): Audio: aac, 44100 Hz, stereo, s16
Output #0, flv, to './20091128-122043.flv':
Stream #0.0(eng): Video: flv (hq), yuv420p, 640x480 [PAR 1:1 DAR 4:3], q=2-31, 300 kb/s, 90k tbn, 59.94 tbc
Stream #0.1(eng): Audio: libmp3lame, 22050 Hz, stereo, s16, 96 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press [q] to stop encoding
frame= 615 fps= 48 q=3.8 Lsize= 776kB time=9.80 bitrate= 649.0kbits/s
video:646kB audio:115kB global headers:0kB muxing overhead 2.072419%
robi tylko jeden przebieg;/
otokan
Sędziwy Jeż
Sędziwy Jeż
Posty: 65
Rejestracja: 11 gru 2008, 11:20
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: bash pętla zrywa się po dwóch przejsciach.

Post autor: otokan »

Kod: Zaznacz cały

 DST = "${SRC%%.[mM][pP]4}" 
Usun spacje przed i po = .

Usterek w Twoim kodzie jest troche wiecej. Koniecznie przeczytaj: http://mywiki.wooledge.org/BashPitfalls

Dodane:
Wiele ciekawych rzeczy jest też tutaj http://mywiki.wooledge.org/BashFAQ
btw: podczas pisania / debuggowania skryptu dobrze wstawic ' set -x' na poczatku skryptu
Awatar użytkownika
maly_wariat
Sędziwy Jeż
Sędziwy Jeż
Posty: 73
Rejestracja: 25 sie 2009, 21:41
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: bash pętla zrywa się po dwóch przejsciach.

Post autor: maly_wariat »

oryginalnie nie mam tej spacji, znacznik code mi ją dodał;/
otokan
Sędziwy Jeż
Sędziwy Jeż
Posty: 65
Rejestracja: 11 gru 2008, 11:20
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: bash pętla zrywa się po dwóch przejsciach.

Post autor: otokan »

A co to wg Ciebie ma robic?

Kod: Zaznacz cały

 mv $DST.flv ./$DST.flv 
Na pewno chcesz miec -f w warunku ifa (a nie np. -d ?)
Awatar użytkownika
maly_wariat
Sędziwy Jeż
Sędziwy Jeż
Posty: 73
Rejestracja: 25 sie 2009, 21:41
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: bash pętla zrywa się po dwóch przejsciach.

Post autor: maly_wariat »

Kurcze przepraszam nie wyspałem się jak to przepisywałem. Zamieszczam oryginalną wersje
jeszcze raz przepraszam

Kod: Zaznacz cały

#!/bin/bash
cd /home/usr
for folder in testowy1 testowy2
do
cd $sklep
find ./ -maxdepth 1 -iname '*.mp4'|while read SRC; do
DST="${SRC%%.[mM][pP]4}"
echo $DST
ffmpeg -i $SRC -ar 22050 -acodec libmp3lame -ab 96k -vcodec flv -b 300k -g 150 -cmp 2 -subcmp 2 -mbd 2 -flags +aic+cbp+mv0+mv4 -trellis 1 $DST.flv
rm -rf $SRC
n=$(date +%A-%d-%B-%y)
        if [ -d $n ]
         then
        mv $DST.flv ./$n/$DST.flv
        else
	mkdir $n
	mv $DST.flv ./$n/$DST.flv
	fi       
done
cd ..
done
otokan
Sędziwy Jeż
Sędziwy Jeż
Posty: 65
Rejestracja: 11 gru 2008, 11:20
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: bash pętla zrywa się po dwóch przejsciach.

Post autor: otokan »

A co to jest $sklep ? :P
Awatar użytkownika
maly_wariat
Sędziwy Jeż
Sędziwy Jeż
Posty: 73
Rejestracja: 25 sie 2009, 21:41
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: bash pętla zrywa się po dwóch przejsciach.

Post autor: maly_wariat »

$sklep -> $folder w oryginale
otokan
Sędziwy Jeż
Sędziwy Jeż
Posty: 65
Rejestracja: 11 gru 2008, 11:20
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: bash pętla zrywa się po dwóch przejsciach.

Post autor: otokan »

W ostatnio zamieszczonym kodzie masz i $sklep i $folder.

Kod: Zaznacz cały

for folder in testowy1 testowy2
do
cd $sklep
Wklejaj kod z edytora, a nie przepisuj.

Topornie Ci pisanie tego skryptu idzie. Może weż zacznij metodą małych kroczków.

Najpierw

Kod: Zaznacz cały

#!/bin/bash

cd /home/usr
pwd
for folder in testowy1 testowy2
do
   echo "[$folder]"
   cd "$folder"
   pwd
   cd ..
done
Jak juz to przetestujesz i bedzie robic dokladnie to co chcesz to dodaj

Kod: Zaznacz cały

find ./ -maxdepth 1 -iname '*.mp4'|while read SRC; do
echo "[$SRC]"
echo "[${SRC%%.[mM][pP]4}]"
done
itd
Awatar użytkownika
maly_wariat
Sędziwy Jeż
Sędziwy Jeż
Posty: 73
Rejestracja: 25 sie 2009, 21:41
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: bash pętla zrywa się po dwóch przejsciach.

Post autor: maly_wariat »

właśnie o to chodzi że pisałem to małymi kroczkami i niby wszystko wyświetla się po prawnie, wydaje mi się że pętle przerywa ffmpeg. Dzisiaj wieczorem dopiero sprawdzę czy działa, bo teraz nie mam możliwości.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 17 gości