Strona 1 z 1

[SOLVED] potrzebuje skrypt kasujący stare pliki i generujący z tego raport - errata

: 23 lis 2010, 09:17
autor: gaijin
Cześć mam poniższy skrypt (dodam go do cron) kasujący stare pliki w folderach w których robi mi się kopia bezpieczeństwa ale chciałbym żeby zapisywał mi raport że dnia tego i tego skasowano co...

find /folder1/* -mtime +60 -exec rm {} \;
find /folder2/* -mtime +60 -exec rm {} \;
find /folder3/* -mtime +60 -exec rm {} \;

proszę o podpowiedź
dzięki

Odp: potrzebuje skrypt kasujący stare pliki i generujący z tego raport

: 23 lis 2010, 10:33
autor: cichy_
najprostsyzm z mozliwych jest rozbudowanie tego skryptu o pare linijek, niestety wydluzy sie troche czas

Kod: Zaznacz cały

data=`date +%Y-%m-%d_%H:%M`
find /folder1/* -mtime +60 > data
find /folder2/* -mtime +60 > data
find /folder3/* -mtime +60 > data
find /folder1/* -mtime +60 -exec rm {} \;
find /folder2/* -mtime +60 -exec rm {} \;
find /folder3/* -mtime +60 -exec rm {} \;

Odp: potrzebuje skrypt kasujący stare pliki i generujący z tego raport

: 23 lis 2010, 11:37
autor: borzole
etam, wystarczy raz wyszukać

Kod: Zaznacz cały

#!/bin/bash

data=`date +%Y-%m-%d_%H:%M`
raport="$HOME/raport.${data}.log"

for dir in '/folder1' '/folder2' '/folder3'
do
	find "$dir"/* -mtime +60 | while read -r line
	do
		# tu robisz co chcesz z parametrem "$line"
		echo $line >> "$raport"
		rm -f "$line"
	done
done

Odp: potrzebuje skrypt kasujący stare pliki i generujący z tego raport

: 29 lis 2010, 11:22
autor: gaijin
dzięki borzole działa dobrze, przerobiłem go trochę pod siebie i działa

EDIT:
ale jak zrobić by sprawdzając te foldery zostawił jeden plik (w tym przypadku kopie zapasową) nawet gdy ma więcej niż te 2 miesiące? czyli kopia była robiona do niego 5miesięcy temu i od tego czasu nie robiono... co w wypadku tego skryptu oznacza że ją skasuje i nie będzie w tym folderze już nic...

Odp: potrzebuje skrypt kasujący stare pliki i generujący z tego raport - errata

: 29 lis 2010, 12:12
autor: borzole
tak najprościej to policzyć pliki przed usuwaniem, wstaw w miejsce rm -f "$line"

Kod: Zaznacz cały

count=$(ls -1A "${line%/*}" | wc -l)

if [ $count -gt 1 ] ; then
	echo tu jest więcej niż jeden plik, więc usuwam
	rm -f "$line"
else
	echo tu jest 1 lub 0 plików
fi
* przy ls parametr 1 wylistuje pliki (i katalogi) w pionie, a A uwzględni ukryte bez ./ i ../

Pewnie można to jakoś zoptymalizować dla konkretnego przypadku, ale to już Twoje zadanie.

Odp: potrzebuje skrypt kasujący stare pliki i generujący z tego raport - errata

: 01 gru 2010, 13:20
autor: gaijin
dobrze gra ale teraz jeszcze coś; jeżeli uruchomię skrypt teraz i w folderze są pliki spełniające -mtime +60 to wtedy kasuje mi wszystkie zostawiając plik posiadający nazwę najbliżej końca alfabetu czyli np v a na d i b kasuje choćby były młodsze. Gdzie dodać komendę i jaką aby sorował według daty i kasował najstarsze a najmłodszy plik zostawiał (wszystkie starsze niż 60 dni).

wiem że teraz to już udziwniam bo powyższy skrypt mi pasuje ale może ktoś podpowie... próbowałem z ls przełącznik t ale nic po tym....

Odp: potrzebuje skrypt kasujący stare pliki i generujący z tego raport - errata

: 01 gru 2010, 15:18
autor: borzole
W sumie masz racje, ostatni znaleziony zostanie i nie ważne czy był najmłodszy z tych najstarszych.
OK, widzę tu kilka opcji.
* jeśli w folderach 1,2,3 są tylko pliki, czyli find nie zagłębia się w podkatalogi oraz pliki nie mają spacji w nazwie, to bajka: wystarczy posortować wynik po czasie ( r odwrotnie: najstarsze pierwsze )

Kod: Zaznacz cały

ls -1Atr $(find ... ) | while 
* jeśli jednak pliki mają spacje w nazwie, to trzeba zmienić IFS żeby je posortować i najprościej posłużyć się funkcją:

Kod: Zaznacz cały

find_sort(){
	local IFS=$'\n'
	ls -1Atr $(find ... )
}

find_sort | while ...
* jeśli natomiast foldery zawierają podfoldery, to trzeba zburzyć trochę algorytm tak aby każdy folder/podfolder był rozpatrywany osobno, a do find trzeba dodać "zblokowanie" do przeszukiwania tylko określonego poziomu ( find . -maxdepth 1 -mindepth 1 -type f )

Odp: potrzebuje skrypt kasujący stare pliki i generujący z tego raport - errata

: 02 gru 2010, 09:03
autor: gaijin
działa; tak w tych folderach będą kopie zapasowe z desktopów (w zip pojedyńcze pliki) a zapisywać się będą na qnapie więc tam w cron wrzucę ten skrypt - myślę że to mi wystarczy jako kontrola rozrostu ilości kopii a i w przypadku ich nie robienia zawsze coś mi tam zostanie... dzięki z tym przełącznikiem r kombinowałem ale w późniejszym miejscu - nie wiedziałem że można stosować nawiasy - muszę się sporo poduczyć :)