Avatar billede fixbabe Nybegynder
23. april 2006 - 22:46 Der er 3 kommentarer og
1 løsning

slette fil på over 50mb og under 5mb

Jeg søger et script der kan tjekker filer i mappen /home/user/test og sletter alle filer over 50mb og alle under 5mb, så de filer der er tilbage er mellem 5-50mb
Avatar billede codebase Praktikant
23. april 2006 - 23:23 #1
Jeg ved ikke om det er dovenskab men syntes tit jeg ser folk skriver ’jeg søger  noget der kan', uden folk lige selv har forsøger sig med et lille script. Eller lige søgt en gang på php.net. Du har formentligt brugt mere tid på at beskrive ønsket kode, end jeg har brugt på at finde eksemplet til dig.

Din beskrivelse af opgaven er jo ganske fin og opgaven er rimelig enkel, så jeg formoder det er rent dovenskab og du håber en stakkel gider kode for dig :-)
( det blev så mig denne gang hehe )

Nå til koden, du skal kigge i en mappes indhold og udføre et tjek på de filer der er i mappen, nedenstående funktion er hentet på php.net og kan liste indholdet af en mappe og dennes undermapper, returneret i et array.
http://dk.php.net/manual/da/class.dir.php

Så er det jo kun at kigge på filstørrelsen og slette de uønskede filer.
http://dk.php.net/manual/da/function.filesize.php
http://dk.php.net/manual/da/function.unlink.php

<?php

function read_dir($dir) {
  $array = array();
  $d = dir($dir);
  while (false !== ($entry = $d->read())) {
      if($entry!='.' && $entry!='..') {
          $entry = $dir.'/'.$entry;
          if(is_dir($entry)) {
              $array[] = $entry;
              $array = array_merge($array, read_dir($entry));
          } else {
              $array[] = $entry;
          }
      }
  }
  $d->close();
  return $array;
}


$dir ="/home/user/test";
$fileArray = read_dir($dir);

foreach( $fileArray AS $file ) {
    if ( filesize( $dir . '/' . $file ) < 5000000 || filesize( $dir . '/' . $file ) > 50000000 ) {
        echo "deleting " . $dir . '/' . $file . "<br>";
        unlink( $dir . '/' . $file );
    }   
}
?>

For god ordens skyld skal det nævnes ovenstående er utestet men bør virke…
Avatar billede fixbabe Nybegynder
24. april 2006 - 16:21 #2
Det virker nu efter det blev rettet til :)

<?php

function read_dir($dir) {
  $array = array();
  $d = dir($dir);
  while (false !== ($entry = $d->read())) {
      if($entry!='.' && $entry!='..') {
          $entry = $dir.'/'.$entry;
          if(is_dir($entry)) {
              $array[] = $entry;
              $array = array_merge($array, read_dir($entry));
          } else {
              $array[] = $entry;
          }
      }
  }
  $d->close();
  return $array;
}


$dir ="/home/user/test";
$fileArray = read_dir($dir);

foreach( $fileArray AS $file ) {
    if ( filesize( $file ) < 5000000 || filesize( $file ) > 50000000 ) {
        echo "deleting " . $file . "<br>";
        unlink( $file );
    }   
}
?>

Tak for hjælpen, hvis du gider smide et svar så jeg kan lukke.
Avatar billede codebase Praktikant
25. april 2006 - 12:41 #3
fino, jeg samler ikke, behold dem bare :)
Avatar billede fixbabe Nybegynder
25. april 2006 - 16:34 #4
Okay takker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester