2011-12-22 10 views
6

Pisałem ten mały skrypt na drugi dzień. Jest to mały program, który zasadniczo znajduje filmy flash działające w przeglądarce i pobiera je. kod coś takiego ..Określić, kiedy wideo zakończyło buforowanie

Kod:

path=$(stat -c %N /proc/*/fd/* 2>&1|awk -F[\`\'] '/lash/{print$2}') 
pid=$(echo $path | cut -d/-f3) 
name=$(ps --no-header -o comm -p $pid) 
mid=$(wmctrl -l | grep -i $name) 
filename=`echo $mid | cut -c 21-$(($(echo $mid | wc -c)-16))` 
cp $path /home/Downloads/"$filename.avi" 

to tylko część pierwszej linii code.The kodu uzyskuje ścieżkę do usuniętego temp file.The druga linia dostaje pid. Trzecia nazwa procesu. Określa identyfikator okna i tytuł okna. Piąta linia manipuluje wyjściem wmctrl, aby wyodrębnić nazwę odtwarzanego wideo (przez większość czasu nazwa wideo jest zawarta w tytule okna ... na przykład youtube)

Teraz, gdy ten skrypt jest uruchamiany po buforowaniu całego filmu, działa bezbłędnie (powyższy skrypt działa dla Google Chrome) .. i kopiuje plik z folderu/proc // fd do folderu pobranych plików i zmian jego nazwa do wyodrębnionej nazwy pliku.

Teraz przychodzi pora na sztuczkę. Chcę zautomatyzować ten kod, na przykład, aby uruchomić ten kod, od teraz muszę czekać, aż film zakończy buforowanie (np. Youtube).

Chcę, aby ten skrypt określił, kiedy wideo zakończyło buforowanie, a następnie kontynuuj kopiowanie bez konieczności ręcznego uruchamiania go na końcu wideo.

Czy jest jakiś sposób, aby dowiedzieć się, kiedy wideo zakończyło buforowanie?

Jestem propozycje beginner.Any dla poprawy kodu są mile widziane

+0

Interesujący pomysł. Czy musisz martwić się, że plik tmp zniknie po zakończeniu odtwarzania lub czy jest to część pamięci podręcznej przeglądarki, która jest usuwana tylko sporadycznie? Ponadto, w sekcji nazwa_pliku = dlaczego używasz wycofań, całe piękno $ (...) dla podstawienia cmd jest takie, że możesz je zagnieździć bez żadnych problemów z cytowaniem. Powodzenia. – shellter

+0

@shellter: Dzięki mate! Zrozumiałem to w końcu. Plik znika tylko wtedy, gdy proces zostanie zabity. Oznacza to, że plik pozostaje w katalogu dopóki przeglądarka nie zostanie zamknięta. Jest to oczywiste z faktu, że filmy (głównie z YouTube) nie są pobierane, gdy odtwarzaj je, są one odtwarzane z pamięci podręcznej (lub podobnej). I backticks, cóż, otrzymałem nieoczekiwany błąd. Logika polega na tym, że rozmiar pliku (z pobranego filmu) ciągle się zmienia, dopóki buforowanie nie zostanie zakończone. Dlatego sprawdzamy rozmiar pliku, aż stanie się stały, a następnie uruchomi funkcję pobierania. –

+0

Niestety, było tam mało postaci.kod to monitor_size() { jeden = 'du -L" $ ścieżka "| awk '{print $ 1}' ' spać 5 dwa =' du -L "$ ścieżka" | awk '{print $ 1}' ' if [$ 1 eq $ TWO] następnie pobieranie inny monitor_size fi } którym funkcję pobierania zawiera wcześniejszą code.Btw, chyba masz rację o zniknięciu pliku tmp. Jest inny. YouTube pobiera jedynie pliki na twój komputer. : westchnienie: –

Odpowiedz

0

aby uzyskać rozmiar pliku, można użyć:

stat -c %s $filename 

z tym można założyć pętli while w celu sprawdzenia, czy plik jest ciągle zmieniających

CURSIZE=0 
LASTSIZE=1 
while ([ $CURSIZE -ne $LASTSIZE ]) do 
    LASTSIZE=`stat -c %s $filename` 
    sleep 1 
CURSIZE=`stat -c %s $filename` 
done 

po tym, powinieneś być w stanie skopiować go zakładając, że połączenie z Internetem nie czkawki za większa niż wartość snu

Powiązane problemy