PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bash: Löschen alter Dateien und "leerer" Verzeichnisse



AmatorPhasma
08-03-2010, 22:54
Hi,

ich habe ein Script das täglich einmal über alle ".RECYCLE" Verzeichnisse der benutzer in "/home" gehen soll, um Dateien älter al 14 Tage zu löschen, meine Frage ist nun habt ihr eine einfachere Lösung oder ist das unten angeführte Script okay?



#Die bedien Variablen in diesem Scipt

ATLANTIS_HOMEPATH="/home";
ATLANTIS_FILE_AGE="30";

find "$ATLANTIS_HOMEPATH" -iname ".RECYCLER" -exec find "{}" -type f -mtime +$ATLANTIS_FILE_AGE \;|while read line
do
rm -f "$line";
done

find "$ATLANTIS_HOMEPATH" -iname ".RECYCLER" -exec find "{}" -depth -type d \;|while read line
do
if [ `echo "$line"|grep -c ".RECYCLER/"` != "0" ];then
if [ `ls -1a "$line"|wc -l` == "2" ]; then
rmdir "$line";
fi
fi
done


Würde mich über Kritik und Anregungen freuen!

msi
08-03-2010, 23:37
nur mal den ersten teil überarbeitet, den zweiten kannst dir dann selber überlegen:



find -type f -path "*/RECYCLE/*" -mtime +30 -print0 | xargs -0 echo rm -f

AmatorPhasma
09-03-2010, 11:23
Danke :)
Warum auch mehr Zeilen als man braucht! :D

msi
09-03-2010, 23:31
Danke :)
Warum auch mehr Zeilen als man braucht! :D


geht nicht nur um weniger zeilen,
dein code war auch nicht safe. Sobald besondere Zeichen zB Neue-Zeile-Zeichen in Dateinamen vorkommen fliegt deni Script auf die Schnauze.

JDieskau
10-03-2010, 12:44
Wie kann man das Script so anpassen, dass es auch leere Verzeichnisse, die zu alt sind, löscht?

EDIT: Ahh ich seh schon. Das ist der zweite Teil... @AmatorPhasma: Kannst du das überarbeitete Script mal komplett posten?

Linus
17-03-2010, 11:38
Leere Verzeichnisse löscht man besser so:

find . -depth -type d -empty -exec rmdir -- {} \;

Damit sollten auch Sonderzeichen kein Problem sein. Verzeichnisnamen mit Newlines habe ich damit noch nicht getestet.