bash, program kasuj

Potrzebujesz pomocy z C, C++, perl, python, itp.
stahoo23
Posty: 46
Rejestracja: 20 marca 2007, 09:05
Lokalizacja: s.o.

bash, program kasujący stare pliki na serwerze

Post autor: stahoo23 »

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

Kod: Zaznacz cały

#!/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
Proszę o pomoc dla początkującego - programik nie działa.
cox
Posty: 3
Rejestracja: 11 marca 2007, 09:35

Post autor: cox »

A czy to musi być program/skrypt? Ostatnio szukałem rozwiązania takiego samego problemu, o to na co się natknąłem:

Kod: Zaznacz cały

find /katalog/w/krotey/sa/pliki/* mtime +30 -exec rm {} \;
Więcej informacji jak zwykle w:

Kod: Zaznacz cały

man find
Pozdrawiam.
stahoo23
Posty: 46
Rejestracja: 20 marca 2007, 09:05
Lokalizacja: s.o.

Post autor: stahoo23 »

Musi być abym sobie dopisał do crona i miał jedną rzecz z głowy.

Opcja z find odpada bo po połączeniu przez ftp działa tylko uboga wersja find bez -mtime.
winnetou

Post autor: winnetou »

A co za problem?

Kod: Zaznacz cały

 at 'find /katalog/w/krotey/sa/pliki/* mtime +30 -exec rm {} \;' 16:00 everyday
i po bólu powinno zadziałać, a jak nie to:

Kod: Zaznacz cały

man at
po więcej szczegółów.

Lub jak kto woli:

Kod: Zaznacz cały

find /katalog/w/krotey/sa/pliki/* mtime +30 -exec rm {} \; 
zapisać to w pliku nazwa.sh, a potem:

Kod: Zaznacz cały

at -f ~/użytkownik/nazwa.sh 16:00 everyday
stahoo23
Posty: 46
Rejestracja: 20 marca 2007, 09:05
Lokalizacja: s.o.

Post autor: stahoo23 »

Napisałem w poście wyżej, że opcja mtime nie działa jak łączę się przez ftp?
Awatar użytkownika
czarownik
Beginner
Posty: 240
Rejestracja: 22 maja 2009, 17:23

Post autor: czarownik »

Podepnę się do postu, mam pytanie tworzę sobie kopię kalogów za pomocą takiego prostego skrytu

Kod: Zaznacz cały

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

DATA=`date +%Y-%m-%d`
cd /mnt/outside/

echo -n "Tworze katalog $DATA"
mkdir "$DATA"
echo "[OK]"
echo -n " Kopiuje pliki"
rsync --progress --delete -axH  /home/czarownik/pliki/ /mnt/outside/$DATA  > /dev/null 2>&1
echo "[OK]"
Teraz chciałbym żeby tworzone przezemnie katalogi były kasowane co tydzień, ( zeby ostatania kopia była sprzed tygodnia) tylko nie bardzo nie wiem jak to ugryźć,
jurenty
Posty: 42
Rejestracja: 29 maja 2008, 10:56
Lokalizacja: Szubin

Post autor: jurenty »

Kod: Zaznacz cały

rm /ścieżka do usuwanego katalogu/`date +%Y-%m-%d' --date '7 days ago'`nazwa usuwanego katalogu

Mam nadzieję, że to Cię naprowadzi :-)
Awatar użytkownika
czarownik
Beginner
Posty: 240
Rejestracja: 22 maja 2009, 17:23

Post autor: czarownik »

Dziękuję jutro postaram się przetestować.

[Dodano: 2009-10-06, 16:20]
jurenty pisze:

Kod: Zaznacz cały

rm /ścieżka do usuwanego katalogu/`date +%Y-%m-%d' --date '7 days ago'`nazwa usuwanego katalogu
Dziękuję, działa prawidłowo, ale wkradła się mała literówka, powinno być:

Kod: Zaznacz cały

rm /sciezka_do_pliku/`date +%Y-%m-%d --date '7 days ago'
jurenty
Posty: 42
Rejestracja: 29 maja 2008, 10:56
Lokalizacja: Szubin

Post autor: jurenty »

Fakt mała literówka, grunt że sobie poradziłeś. :-)
ODPOWIEDZ