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

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
gaijin
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 06 lis 2006, 12:17
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: Unity
Architektura: x86_64

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

Post 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
cichy_
Piegowaty Guziec
Piegowaty Guziec
Posty: 28
Rejestracja: 19 sty 2009, 13:46
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

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

Post 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 {} \;
Awatar użytkownika
borzole
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 127
Rejestracja: 10 sie 2010, 11:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

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

Post 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
gaijin
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 06 lis 2006, 12:17
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: Unity
Architektura: x86_64

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

Post 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...
Awatar użytkownika
borzole
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 127
Rejestracja: 10 sie 2010, 11:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

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

Post 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.
gaijin
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 06 lis 2006, 12:17
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: Unity
Architektura: x86_64

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

Post 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....
Awatar użytkownika
borzole
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 127
Rejestracja: 10 sie 2010, 11:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

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

Post 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 )
gaijin
Sędziwy Jeż
Sędziwy Jeż
Posty: 45
Rejestracja: 06 lis 2006, 12:17
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: Unity
Architektura: x86_64

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

Post 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ć :)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 80 gości