[Perl] glob und leere Verzeichnisse

anddie

Well-known member
ID: 171
L
3 Mai 2006
2.270
133
Hi,

ich will aus einem Verzeichnis und allen Unterverzeichnissen alle Dateien löschen, die älter als 20 Tage sind.
Dazu lese ich mittels glob die ganzen Verzeichnisse aus und schau mir dann die mtime an.

Das Ganze sieht derzeit so aus ($path ist das Startverzeichnis, wo die ganzen Unterverzeichnisse mit den zu löschenden Dateien liegen):
PHP:
foreach $dir (glob("$path/*/*"))
{ 
  my (undef, undef, undef, undef, undef, undef, undef, $size, $atime, $mtime, $ctime, undef, undef) = stat($dir);
  $last_change = localtime($mtime);
  if($mtime < (time() - (3600 * 24 * 10)))
  { 
    print "\nLoesche ".$dir;
    unlink($dir); 
  }
}

Funktioniert auch ganz gut, nur möchte ich jetzt auch noch alle Verzeichnisse löschen, die keine Dateien mehr enthalten. Und da scheiter ich aktuell irgendwie dran.

anddie
 
da machste danach nochmal so ne schleife... alles was nen verzeichniss ist öffnest du und schaust ob datein drin sind, wenn nicht weg damit.

zb in php würde ich das jetzt ungefähr so ausschauen
PHP:
foreach(glob(*,ONLYDIR) AS $dir) {
    if(count(glob($dir.'/*'))===0) rmdir($dir);
}
 
Die wollte ich eigentlich vermeiden, hab es jetzt aber trotzdem so gemacht.

anddie

naja du könntest auch in der schleife die du schon hast nach jedem löschen prüfen ob das verzeichniss in dem die datei war leer ist... die frage ist was ist besser, dass ist aber abhängig von der stuktur und der anzahl der datein/verzeichnisse. im grunde genommen ist es aber wurscht... das script wird mit sicherheit nicht jede sekunde laufen.