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
stahoo23 napisał(-a):
znowu postanowilem zadzialac i juz mam liste:
Kod:
lftp -f listaa lista to
Kod:
open adres user login haslo ls -lart > /home/stahoo23/listata linia
Kod:
awk '{data=mktime(gensub("[:-]", " ", "g", $6 " " $7 " 00")); if (data<systime()-60*60*24*30) print $8}' < lista > lista_rmnie 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:
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
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)
Offline
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
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