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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
program ma usuwać stare pliki (np starsze niż 30 dni) z maszyny do której mam dostęp tylko przez ftp.
#!/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
nie prosciej:
find -type f -a -mtime +30 -a -ctime +30 -exec rm '{}' \;
Ostatnio edytowany przez bercik (2008-03-09 21:55:20)
Offline
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 ;-)
Offline
[quote=stahoo23]znowu postanowilem zadzialac i juz mam liste:
lftp -f lista
a lista to
open adres user login haslo ls -lart > /home/stahoo23/lista
ta linia
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:
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
ls -lA -time-style=+" %Y-%m-%d %H:%M:%S "
... jezeli -time-style jest nie akceptowalne daj znac pokombinuje w skrypcie
Offline
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
[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)
Offline
[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
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
Offline
-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
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
Offline
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
$ 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
Strony: 1
Time (s) | Query |
---|---|
0.00011 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00135 | 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='3.145.115.139' WHERE u.id=1 |
0.00063 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.145.115.139', 1732398613) |
0.00023 | SELECT * FROM punbb_online WHERE logged<1732398313 |
0.00080 | DELETE FROM punbb_online WHERE ident='54.36.148.122' |
0.00019 | SELECT topic_id FROM punbb_posts WHERE id=85124 |
0.00024 | SELECT id FROM punbb_posts WHERE topic_id=10824 ORDER BY posted |
0.00030 | 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.00033 | SELECT search_for, replace_with FROM punbb_censoring |
0.00195 | 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.00075 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=10824 |
Total query time: 0.00692 s |