potrzebuje skrypt kasujący stare pliki i generujący z tego raport - errata
-
- 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
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
find /folder1/* -mtime +60 -exec rm {} \;
find /folder2/* -mtime +60 -exec rm {} \;
find /folder3/* -mtime +60 -exec rm {} \;
proszę o podpowiedź
dzięki
-
- 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
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 {} \;
- borzole
- 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
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
-
- 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
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...
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...
- borzole
- 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
tak najprościej to policzyć pliki przed usuwaniem, wstaw w miejsce rm -f "$line"
* 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.
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
Pewnie można to jakoś zoptymalizować dla konkretnego przypadku, ale to już Twoje zadanie.
-
- 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
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....
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....
- borzole
- 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
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 )
* jeśli jednak pliki mają spacje w nazwie, to trzeba zmienić IFS żeby je posortować i najprościej posłużyć się funkcją:
* 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 )
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
Kod: Zaznacz cały
find_sort(){
local IFS=$'\n'
ls -1Atr $(find ... )
}
find_sort | while ...
-
- 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
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ć
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość