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

[quote=stahoo23]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[/quote]
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

[quote=stahoo23]to pierwsze polecenia nie daje listy z plikami do usuniecia starszymi niz 30 dni lecz wszystkie.[/quote]
[quote=bercik]2. pisalem ze zakladam iz data jest w formacie YYYY-MM-DD HH:MM[/quote]
pisalem jakiego formatu daty wymaga ... skoro takiego nie dosataje i dostawac nie moze bo
[quote=stahoo23]4. odpada[/quote]
(dzlaczego ?) to trzeba przeobic skrypt ... bo dzialac nie bedzie

[quote=stahoo23]dziala (ale nie do konca) to pierwsze polecenie, to drugie (3) nie.[/quote]
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

[quote=stahoo23]nie dziala w sensie ze program wisi i nie ma efektow - zakanczam go ctrl+c.[/quote]
przekierowales do niego uzyskana liste czy odpaliles tak po prostu ?

[quote=stahoo23]4. ftp nie zna opcji time-style[/quote]
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 ;-)

[ Generated in 0.012 seconds, 12 queries executed ]

Informacje debugowania

Time (s) Query
0.00016 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00120 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.191.162.73' WHERE u.id=1
0.00076 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.191.162.73', 1732397410)
0.00070 SELECT * FROM punbb_online WHERE logged<1732397110
0.00087 DELETE FROM punbb_online WHERE ident='54.36.148.86'
0.00081 SELECT topic_id FROM punbb_posts WHERE id=85105
0.00006 SELECT id FROM punbb_posts WHERE topic_id=10824 ORDER BY posted
0.00060 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=10824 AND t.moved_to IS NULL
0.00012 SELECT search_for, replace_with FROM punbb_censoring
0.00292 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=10824 ORDER BY p.id LIMIT 0,25
0.00084 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=10824
Total query time: 0.00908 s