Hallo,
Ich habe jetzt doch endlich etwas selber gebastelt. Es ist nicht besonders schoen, funktioniert aber hinreichend.
Leider habe ich es nicht geschafft, sed anstelle von awk zu verwenden.
Wenn jemand dazu noch einen Einfall hat: nur her damit.
Gruss,
Daniel
Code:
#!/bin/sh
# setze Minimalalter der zu suchenden Dateien
if [ "ZZZ$1" == "ZZZ" ]; then
IDLEDAYS=365
else
IDLEDAYS=$1
fi
# Hauptverzeichnis, in dem die entsprechenden Unterverzeichnisse liegen
MAINPATH=/main/directory
subs="
${MAINPATH}/sub1
${MAINPATH}/sub2
${MAINPATH}/sub3
${MAINPATH}/sub4
${MAINPATH}/sub5
"
# finde alle Verzeichnisse, die laenger als vor $IDLEDAYS Tagen geaendert wurden
function find_dirs () {
for sublevel in "$subs"; do
find_older=""
# finde zuerst Ordner im ersten Sublevel, die aelter als X Tage sind
find_older="$(find $sublevel -xdev -maxdepth 1 -type d -mtime +$IDLEDAYS)"
find_newer=""
# suche nun in den gefundenen Ordnern nach Dateien, die juenger als X Tage sind
find_newer="$(echo "$find_older" | while read a; do find "$a" -xdev -mtime -$IDLEDAYS; done)"
find_stinky=""
# kuerze die Pfadnamen der faulen Ordner bis auf die 4. Ebene ab
find_stinky="$(echo "$find_newer" | awk -F"/" '{ print "/"$2"/"$3"/"$4"/"$5 }' | sort -u)"
find_purified=""
# filtere in der Liste der alten Ordner diejenigen heraus, die in der Liste der faulen Ordner auch enthalten sind
find_purified="$(echo "$find_older" | grep -v "`echo "$find_stinky" | while read a; do echo "$a"; done`")"
echo "$find_purified"
done
}
# Ausgabefunktion: schreibt die Ausgabe nach /tmp/myolddirs.txt
function print_dirs () {
find_dirs | while read a; do
tree -D "$a"
echo -e "\n\n\n"
done > /tmp/myolddirs.txt
}
# Funktion aufrufen
printdirs
Aufruf: skript.sh 365 <-- das Alter der zu suchen Verzeichnisse
Lesezeichen