Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2008-03-09 20:44:45

  stahoo23 - Użytkownik

stahoo23
Użytkownik
Skąd: s.o.
Zarejestrowany: 2006-04-01
Serwis

bash, program kasujący stare pliki na serwerze

program ma usuwać stare pliki (np starsze niż 30 dni) z maszyny do której mam dostęp tylko przez ftp.

Kod:

#!/bin/bash
lftp -u uzytkownik,haslo adres
ls -lart > lista
get lista
awk '{print $6, $7}' lista > lista1
awk '{print $8}' lista > lista3
for a in `cat lista1`; do date --date="$a" +"%s" ; done > lista2
b=`date +"%s"`
c=$((b-3600*24*30))
d=`cat lista2`
e=`cat lista3`
if [$c -le $d] ; then
for e in `cat lista`; do rm -f $8 ; done; fi

prosze o pomoc dla poczatkujacego - programik nie dziala

Offline

 

#2  2008-03-09 21:54:50

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: bash, program kasujący stare pliki na serwerze

nie prosciej:

Kod:

find  -type f -a -mtime +30 -a -ctime +30 -exec rm '{}' \;

Ostatnio edytowany przez bercik (2008-03-09 21:55:20)


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#3  2008-03-10 00:34:36

  stahoo23 - Użytkownik

stahoo23
Użytkownik
Skąd: s.o.
Zarejestrowany: 2006-04-01
Serwis

Re: bash, program kasujący stare pliki na serwerze

ten ftp obsluguje tylko najprostsza wersje find. z -mtime to by bylo milo jakby sie dalo, ale niestety nie dziala. dlatego sciagam liste plikow i na niej probuje dzialac.

Offline

 

#4  2008-03-10 01:42:30

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: bash, program kasujący stare pliki na serwerze

Kod:

awk '{data=mktime(gensub("[:-]", " ", "g", $6 " " $7 " 00")); if (data<systime()-60*60*24*30) print $8}' < lista > lista_rm

wygeneruje liste plikow do usuniecia

zakladam ze data zwracana przez ls jest w formacie YYYY-MM-DD HH:MM, jezeli jest inaczej podaj w jakim - cos wykombinujemy ;-)


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#5  2008-04-17 12:46:29

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: bash, program kasujący stare pliki na serwerze

stahoo23 napisał(-a):

znowu postanowilem zadzialac i juz mam liste:

Kod:

lftp -f lista

a lista to

Kod:

open adres
user login haslo
ls -lart > /home/stahoo23/lista

ta linia

Kod:

awk '{data=mktime(gensub("[:-]", " ", "g", $6 " " $7 " 00")); if (data<systime()-60*60*24*30) print $8}' < lista > lista_rm

nie dziala:
awk: line 2: function systime never defined   
awk: line 2: function mktime never defined
awk: line 2: function gensub never defined

1. uzyj GAWK zamiast AWK
2. pisalem ze zakladam iz data jest w formacie YYYY-MM-DD HH:MM
3. nazwy zawieraja spacje wiec trzebaby zrobic:

Kod:

gawk '{
  data=mktime(gensub("[:-]", " ", "g", $6 " " $7 " 00"));
  if (data<systime()-60*60*24*30) {
    file_name=$8;
    for (i=9; i<=NF; i++) {
      file_name=sprintf("%s %s", file_name, $i)
    };
    print file_name
  }
}'

4. jezeli mozesz to dawaj

Kod:

ls -lA -time-style=+" %Y-%m-%d %H:%M:%S "

... jezeli -time-style jest nie akceptowalne daj znac pokombinuje w skrypcie


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#6  2008-04-18 16:56:24

  stahoo23 - Użytkownik

stahoo23
Użytkownik
Skąd: s.o.
Zarejestrowany: 2006-04-01
Serwis

Re: bash, program kasujący stare pliki na serwerze

4. odpada

nie mialem gawk - doinstalowalem - dziala (ale nie do konca) to pierwsze polecenie, to drugie (3) nie.
wynik pierwszego to godziny - zmienilem na $9, zeby byly nazwy plikow. jak pisales sa spacje.
to pierwsze polecenia nie daje listy z plikami do usuniecia starszymi niz 30 dni lecz wszystkie.
mozesz sam to sprawdzic - wyslalem mejla z plikiem lista

Offline

 

#7  2008-04-18 19:13:46

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: bash, program kasujący stare pliki na serwerze

stahoo23 napisał(-a):

to pierwsze polecenia nie daje listy z plikami do usuniecia starszymi niz 30 dni lecz wszystkie.

bercik napisał(-a):

2. pisalem ze zakladam iz data jest w formacie YYYY-MM-DD HH:MM

pisalem jakiego formatu daty wymaga ... skoro takiego nie dosataje i dostawac nie moze bo

stahoo23 napisał(-a):

4. odpada

(dzlaczego ?) to trzeba przeobic skrypt ... bo dzialac nie bedzie

stahoo23 napisał(-a):

dziala (ale nie do konca) to pierwsze polecenie, to drugie (3) nie.

nie dziala - czyli ? (rozni sie ono tylko obsluga spacji w nazwach plikow)


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#8  2008-04-21 15:21:02

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: bash, program kasujący stare pliki na serwerze

stahoo23 napisał(-a):

nie dziala w sensie ze program wisi i nie ma efektow - zakanczam go ctrl+c.

przekierowales do niego uzyskana liste czy odpaliles tak po prostu ?

stahoo23 napisał(-a):

4. ftp nie zna opcji time-style

ponizsze powinno zadzialac na takim formacie daty jaki wypluwa ten ls

Kod:

gawk '{
  cmd = sprintf("date -d \"%s %s %s\" +%%s", $6, $7, $8)
  cmd | getline data;
  if (data<systime()-60*60*24*30) {
    file_name=$9;
    for (i=10; i<=NF; i++) {
      file_name=sprintf("%s %s", file_name, $i)
    };
    print file_name
  }
}' < lista

"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#9  2008-04-21 22:34:52

  stahoo23 - Użytkownik

stahoo23
Użytkownik
Skąd: s.o.
Zarejestrowany: 2006-04-01
Serwis

Re: bash, program kasujący stare pliki na serwerze

działa !!! szacun.

Offline

 

#10  2009-06-22 10:44:39

  mihoo_koz - Użytkownik

mihoo_koz
Użytkownik
Zarejestrowany: 2006-09-27

Re: bash, program kasujący stare pliki na serwerze

Kod:

-rw-r--r-- 1 ftp ftp     2002101648 Jun 14 00:23 dzienny-2009-06-14.tar.gz
-rw-r--r-- 1 ftp ftp     2012044328 Jun 15 00:24 dzienny-2009-06-15.tar.gz
-rw-r--r-- 1 ftp ftp     1725066016 Jun 16 00:23 dzienny-2009-06-16.tar.gz
-rw-r--r-- 1 ftp ftp     1996286478 Jun 17 00:24 dzienny-2009-06-17.tar.gz
-rw-r--r-- 1 ftp ftp     1991566208 Jun 18 00:24 dzienny-2009-06-18.tar.gz
-rw-r--r-- 1 ftp ftp     2005759367 Jun 19 00:25 dzienny-2009-06-19.tar.gz
-rw-r--r-- 1 ftp ftp     2010396151 Jun 20 00:25 dzienny-2009-06-20.tar.gz
-rw-r--r-- 1 ftp ftp     2026774691 Jun 21 00:24 dzienny-2009-06-21.tar.gz
-rw-r--r-- 1 ftp ftp     2028670392 Jun 22 00:25 dzienny-2009-06-22.tar.gz

lista plików pobrana z serwera ftp, jak ma wyglądać teraz sktypt do uswiania plików starszych o np 5 dni ?

Offline

 

#11  2009-06-22 13:28:39

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: bash, program kasujący stare pliki na serwerze

jak powyzej ... tylko zamiast 30 w "if (data<systime()-60*60*24*30)" podajesz 5 ...

skrypt generuje liste plikow do usuniecia ... ich usuniecie to juz standardowa komenda ...

PS odnosze wrazenie ze zjadlo jeden post stahoo23 (pomiedzy moimi) gdzie byl wlasnie pokazany format ls na ktorym dziala skrypt


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#12  2010-11-27 23:47:45

  matej - Nowy użytkownik

matej
Nowy użytkownik
Zarejestrowany: 2010-11-27

Re: bash, program kasujący stare pliki na serwerze

Odświeżę temat, czy mógłby ktoś teraz zebrać to do kupy i zamieścić przykładowy kod tego skryptu?
Bo niestety jestem początkujący w tym temacie a bardzo mi zależy na na takim skrypcie.
Z góry dzięki za poświęcenie.

Offline

 

#13  2010-12-01 19:58:59

  stahoo23 - Użytkownik

stahoo23
Użytkownik
Skąd: s.o.
Zarejestrowany: 2006-04-01
Serwis

Re: bash, program kasujący stare pliki na serwerze

$ cat usun_stare
#!/bin/bash
katalog="/home/motylek/Music/konwersja/"
lftp -f $katalog/lista_sound #pobieranie listy plikow z serweru soundcast
gawk '{
  cmd = sprintf("date -d \"%s %s %s\" +%%s", $6, $7, $8)
    cmd | getline data;
      if (data<systime()-40*60*24*50) {
          file_name=$9;
              for (i=10; i<=NF; i++) {
                    file_name=sprintf("%s %s", file_name, $i)
                        };
                            print file_name
                              }
                              }' < $katalog/lista > $katalog/lista_rm
sed -e 's/^\(.*\)/rm -f \1/' $katalog/lista_rm > $katalog/lista_rmm
sed -e '3,$d' $katalog/lista_loguj > $katalog/lista_usun
cat $katalog/lista_rmm >> $katalog/lista_usun
lftp -f $katalog/lista_usun



plik lista_sound jakos tak:

open ip_serwera
user login haslo

reszta plikow potrzebnych gdzies mi wcielo.
powodzenia w rekonstrukcji. czytanie man lftp nieuniknione;)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)