Sprawdzanie czy plik nie zmieni

Potrzebujesz pomocy z C, C++, perl, python, itp.
rryk
Posty: 50
Rejestracja: 13 stycznia 2009, 08:49

Sprawdzanie czy plik nie zmienił ilości linijek - bash

Post autor: rryk »

Napisałem w innym temacie, w którym stosowałem niedziałający sposób sprawdzania lecz nikt nie podjął się jego naprawy, a więc zwrócę się z prośbą o stworzenie nowego działającego skryptu na ciągłe sprawdzanie ilości linijek danego pliku jeżeli ta wielkość osiągnie ustaloną wartość wtedy wyświetli się raz komunikat, jeżeli zaś przekroczy pojawi się inny komunikat, który będzie się powtarzać tylko w wypadku gdy liczba linii się zmieni.
tomii
Junior Member
Posty: 687
Rejestracja: 21 października 2007, 13:27

Post autor: tomii »

Tzn. sprawdzamy ile plik ma linijek i jak ma, mniej niż x to komunikat1, jak ilość równą x to kompunikat2, a jak więcej niż x to komunikat3?
rryk
Posty: 50
Rejestracja: 13 stycznia 2009, 08:49

Post autor: rryk »

Tak, chociaż jeśli plik ma mniej to nie koniecznie - istotne jest jednak to aby pojawiał się jeden komunikat za każdym razem jeżeli ilość linijek się zmieni, a nie w nieskończoność jeśli plik ciągle będzie miał 2 linijki.
tomii
Junior Member
Posty: 687
Rejestracja: 21 października 2007, 13:27

Post autor: tomii »

Czyli ilość linijek do porównanie nie jest z góry znana tylko trzeba ją zapisywać?
winnetou

Post autor: winnetou »

Kod: Zaznacz cały

##################################
# Author:   Przemysław "winnetou" Wilkosz      #
# Licence:  Creative Commons Attribution        #
# Desc:     Line counter for files                      #
##################################


#!/bin/sh

FILE=$1
MAX_LINES=$2
EQUAL=0
OLD_LINES=0
OVERDOSE=0
MSG1="Liczba linijek w pliku osiagnela dopuszczalne maksimum"
MSG2="Liczba linijek przekroczyla dopuszczalne maksimum."


while [ 1 ]
do
 LINES=`wc -l $FILE | awk '{print $1}'`
 if [ $LINES -eq $MAX_LINES ]
 then
  if [ $EQUAL -eq 0 ]
  then
   EQUAL=1
   echo "`date`: $MSG1"
  else
   continue
  fi
 elif [ $LINES -gt $MAX_LINES ] && [ $OVERDOSE -eq 0 ]
 then
  OVERDOSE=1
  OLD_LINES=$LINES
  echo "`date`: $MSG2"
 elif [ $LINES -gt $MAX_LINES ] && [ $OVERDOSE -eq 1 ]
 then
  if [ $LINES -gt $OLD_LINES ]
  then
   echo "`date`: $MSG2"
   OLD_LINES=$LINES
  fi
 fi
 sleep 2
done
rryk
Posty: 50
Rejestracja: 13 stycznia 2009, 08:49

Post autor: rryk »

Jeszcze nie testowałem ale powinno działać - czy według tej licencji, którą objąłeś dany kod - mogę modyfikować, łączyć i przerabiać kod oraz go rozprowadzać byle by tylko umieścić cię w rubryce Autorzy albo współtwórcy? I czy ewentualnie mógłbyś zmienić licencje ponieważ przez twój kod od sprawdzania musiałbym zmienić licencję całego skryptu.
winnetou

Post autor: winnetou »

CC Atribution pisze:Uznanie autorstwa (ang. Attribution)
Wolno kopiować, rozprowadzać, przedstawiać i wykonywać objęty prawem autorskim utwór oraz opracowane na jego podstawie utwory zależne pod warunkiem, że zostanie przywołane nazwisko autora pierwowzoru.
Powszechna Licencja Publiczna GNU v2 pisze:1.
Możesz kopiować i rozprowadzać w dowolnych mediach wierne kopie kodu źródłowego Programu w otrzymanej formie pod warunkiem, że w widoczny sposób i odpowiednio podasz na każdej kopii właściwą informację o prawie autorskim i zrzeczenie się uprawnień z tytułu gwarancji]

Tak czy siak musiałbyś umieścić mnie jako autora. Nawet jeżeli jawnie nie podam na jakiej licencji rozpowszechniany jest skrypt obowiązuje Cię wskazanie autora. Jak bardzo chcesz mogę zmienić na GNU/GPL ale wtedy jak wykorzystasz chociaż linijkę z tego skryptu całą swoją pracę będziesz musiał udostępnić na GNU/GPL.

A skrypt działa testowany w warunkach bojowych.
rryk
Posty: 50
Rejestracja: 13 stycznia 2009, 08:49

Post autor: rryk »

Wiem, spokojnie podam Cię jako autora, nie musisz się martwić. Ale chodzi tu o samą licencje - bo ja jeszcze nie zdecydowałem jaką wybrać dla swojego projektu, a z tego co czytałem o Creative Commons Attribution to musiałbym również w tym przypadku zmieniać licencje na Creative Commons Attribution bo tak jak w przypadku GNU/GPL użyłem części kodu opatrzonego tą licencją.

Skrypt działa wyśmienicie nawet lepiej niż przypuszczałem. Tylko dziwi mnie jedno po co tam ,,OVERDOSE'' i jego zależności w wyświetlaniu MSG2 - jak na to patrzę:

Kod: Zaznacz cały

elif [ $LINES -gt $MAX_LINES ] && [ $OVERDOSE -eq 0 ]
 then
  OVERDOSE=1
  OLD_LINES=$LINES
  echo "`date`: $MSG2"
 elif [ $LINES -gt $MAX_LINES ] && [ $OVERDOSE -eq 1 ]
 then
  if [ $LINES -gt $OLD_LINES ]
  then
   echo "`date`: $MSG2"
   OLD_LINES=$LINES
  fi
 fi 
to przychodzi mi tylko jedno powiedzenie: Masło maślane i masłem polane.

A co do samego projektu to może widziałeś mój temat na forum Ubuntu: InfoSMS. Po prostu jego głównym zadaniem jest informowanie nas o stanie komputera. Obecnie jestem na etapie dodawania funkcji MSG GG na podstawie ekg2, a następnie dodam nk i może pocztę (która już była dodana ale zbyt szybko i kod kuł w oczy).
winnetou

Post autor: winnetou »

Pisałem na szybko i nie optymalizowałem :) A $OVERDOSE w wersji pre-alpha pomógł mi zatrzymać powtarzający się komunikat o przekroczeniu maksymalnej liczby linijek ;] Wieczorem może powalczę z optymalizacją ;] Zresztą pousuwaj i eksperymentuj :) )
rryk
Posty: 50
Rejestracja: 13 stycznia 2009, 08:49

Post autor: rryk »

Wolę żebyś ty się zajął optymalizacją - ja akurat w te klocki to cienki jestem - jak skończę wersje pre-alpha swojego projektu spędzę co najmniej pół roku na uporządkowaniu i optymalizacji wtedy oddam skrypt w ręce użytkowników.

Ps. Możesz być umieszczony w ,,Credits'' a nie Autorzy bo podejrzewam, że po tej pomocy nasza współpraca nad tym projektem się zakończy, a co za tym idzie pielęgnować i implementować nowe funkcję będę musiał sam - chyba, że jednak chcesz dalej się nim zajmować? A co do samego wyglądu ,,credits'' to wyglądać będzie w ten sposób:

Kod: Zaznacz cały

......<bla bla bla informacje o mnie bla bla>.......

CREDITS:
Specjalne podziękowania dla:
-użytkowników forum UBUNTU.PL oraz DEBIAN.LINUX.PL
-KamilSilvera za pomoc i wsparcie techniczne
-Przemysława "winnetou" Wilkosza za kod dotyczący sprawdzania ilości linijek w danym pliku i jego optymalizację (moduł ekg2)
-człowieka, dzięki któremu ten projekt powstał, a którego prośba została na forum odrzucona'
ODPOWIEDZ