Zaawansowany watchfolder. Ktoś może pomóc?

Zaczęty przez PoznanskaPyra, 25 Marzec 2017, 04:51

PoznanskaPyra

Potrzebuje stworzyć pod windowsem dość skomplikowany watchfolder i kompletnie nie wiem, jak się do tego zabrać.

Jak by miał działać:

Obserowanie danego folderu, jeżeli trafi tam plik, skrypt powinien sprawdzić czy w nazwie jest data, jeżeli jest, powinien wysłać plik do liczenia h264, równocześnie powinien sprawdzić jego wielkość, jeżeli ma ponad 3.5GB powinien zostać przeliczony do mpeg, jeżeli nie, to do AVI.

Jeżeli w nazwie nie ma daty, skrypt powinien sprawdzić czy w nazwie znajdują się dane skróty (gosp, pd, pds, sm, sk) jeżeli znajdzie taki, plik powinien zostać sprawdzony czy ma ponad 3.5GB i jeżeli tak to przeliczony do mpeg, jeżeli nie to do AVI.

Drugi skrypt powinien obserwować folder z plikami wynikowymi, jeżeli znajdzie tam plik z gosp w nazwie, to wrzuca go do folderu gospodarz, jeżeli pd to do folderu puls, jeżeli pds to do folderu skróty, jeżeli sm to do folderu pogoda, jeżeli sk to do folderu komunikacja.

Czy można coś takiego stworzyć pod windowsem ?  %)
WIZYTÓWKA
Kompy:
AMD Ryzen 9-3900X + GTX980Ti
Intel i5 4570 + HD7970

Szopler


cp

#2
Jeśli da się to stworzyć narzędziami UNIX-owymi (a na pierwszy rzut oka nie widzę tam żadnego warunku, którego nie dałoby się zaimplementować w skrypcie shellowym) to da się tymi samymi narzędziami pod windowsem z wykorzystaniem MinGW lub CygWin-a  %)

goofyx

Z własnego doświadczenia znam 2 rozwiązania:
1) albo ręcznie i samodzielnie obserwować dany katalog i np.:co 5sek (czy tam ile potrzebujesz) sprawdzać zmiany (coś jak svn itp).
PROBLEM: jeśli katalog ma kilka tysięcy plików to czyna to obciążać system
2) albo napisać usługę windowsa z obsługa uchwytów co do zdarzeń <- kopiowania, usuwania itp
PROBLEM: na każdej wersji systemu (a czasami nawet po jakiś updejtach) może/działa to troszkę inaczej

Troll81

skrypt w PS który sprawdza delte folderu i w przypadku wykrycia róznic wykonuje odpowiednie akcje??

krzyszp

Swego czasu pisałem sobie zamiennik Dropboxa w .Net wykorzystując zdarzenia na plikach/katalogach... Nigdy więcej - biblioteki systemowe raportują KAŻDĄ zmianę, co powodowało przy zwykłym kopiowaniu miliony wywołań watchera, bo każde zapisanie kolejnego sektora jest widziane jako zmiana stanu pliku...
Ominąłem to jakoś, jednak nigdy do końca idealnie mi to nie działało i w końcu dałem sobie spokój, nie miałem tygodnia wolnego na zabawę...


Należę do drużyny BOINC@Poland
Moja wizytówka

Argento

Cytat: PoznanskaPyra w 25 Marzec 2017, 04:51
Potrzebuje stworzyć pod windowsem dość skomplikowany watchfolder i kompletnie nie wiem, jak się do tego zabrać.

Może coś tutaj znajdziesz:
https://technet.microsoft.com/en-us/library/ff730178(v=ws.10).aspx


--
Pozdrawiam
Z poważaniem
Argento

EDU Enthusiast

1) co bedziesz uzywal do liczenia h264, (musialbys znalezc cos co moznabyloby odpalic bez glowy <headless>)
2) Jak bedziesz zapisaywal swoja date?
3) Przyklad jak beda foldery wygladaly (c:\folder1 folder2 etc) ktore beda dla mpeg a ktore dla avi
4) jakie beda typy nazw i gdzie one beda isc do ktorych folderow.


moge ci napisac cos takiego co bedzie ci sortowala foldery wedlug nazwy, i wkladala nawzwe pliku do specyficznej execucji.

PoznanskaPyra

#8
1. Obecnie używam x media recode, ale jest wiele darmowych konwerterów, pytanie który tobie najlepiej podpasuje.
2. Zapis daty w formacie np. 2017-03-26
3. Foldery wyjściowe planowałem 3, oddzielny dla każdego formatu. Nazwy gotowe-avi, gotowe-mpeg, gotowe-h264. Kontener dla h264, najlepiej mov. Ale to już kwestia encodera.
4. Nazwy muszą definiować typy generowanych plików. Jak pisałem, jeżeli plik ma pd_, pds_, sm_, sk_, gosp_, w nazwie i jest mniejszy niż 3.5GB = AVI, jeżeli więcej niż 3.5GB =mpeg.
Jeżeli pełna data jest w nazwie, to liczy go do h264 oraz do AVI lub mpeg w zależności od wielkości pliku.

Foldery wejściowe są zdalne na macierzy o ile robi to jakąś różnicę. Foldery wyjściowe mogą być lokalne.
WIZYTÓWKA
Kompy:
AMD Ryzen 9-3900X + GTX980Ti
Intel i5 4570 + HD7970

TJM

#9
Potwierdzam to co wcześniej było napisane, skrypt autoita da się do tego napisać w mgnieniu oka.
Musiałoby to działać na takiej mniej więcej zasadzie:

1. listing zawartości folderu - są gotowe funkcje/UDFy zwracające zawartość folderu w postaci tablicy (z pamięci piszę ale chyba filelisttoarray)
2. przeszukanie zawartości tablicy z plikami szukając tych interesujących (od tego punktu w dół to już same proste funkcje wbudowane w autoita)
3. sprawdzenie atrybutów pliku (wielkość)
4. uruchomienie akcji na podstawie stwierdzonych parametrów - autoit umożliwia odpalenie zewnętrznej aplikacji na kilka sposobów, żaden problem puścić w tle coś nawet z okrutnie skomplikowaną linią poleceń
5. sleep i powrót do 1

ogólnie skrypt na paręnaście linijek, góra parędziesiąt bardziej odporny na błędy, + includowane ewentualnie UDFy.

EDIT: trzeba jeszcze przewidzieć jakąś obsługę plików które już skrypt "widział" ale idąc po linii najmniejszego oporu to nie jest trudne do zrobienia.

Jeśli będzie pełna specyfikacja mogę napisać taki skrypt jako browarware %) w ramach podtrzymywania skilla w autoicie  :D

W razie jakiejś pilniejszej sprawy - jestem często dostępny na kanale IRC B@P, na forum czasami zapominam zajrzeć lub nie mam czasu.