Avatar billede Slettet bruger
08. januar 2001 - 14:56 Der er 49 kommentarer og
1 løsning

Automatisk sletning af gamle filer

Jeg har brug for et program der chekker datoerne på en række filer (*.*), og hvis disse er over en måned gamle sletter dem.
Er der nogen der har et forslag til hvordan dette kan løses? Jeg rodede mig ud i noget batch programmering, men det blev hurtigt for indviklet, da dos bl.a. ikke understøtter lange filnavne, der er nødvendigt i dette tilfælde. Håber nogen har en idé.

Mvh.
Atropine/RubberSoul
Avatar billede disky Nybegynder
08. januar 2001 - 14:58 #1
Du kan hurtig bixe en Java Application sammen der gør det (forudsat du kan java)
Avatar billede erikjacobsen Ekspert
08. januar 2001 - 14:59 #2
eller Perl - vil fylde 5-10 linier (ca.)
Avatar billede olebole Juniormester
08. januar 2001 - 15:01 #3
<ole>
...eller php :))
/mvh
</bole>
Avatar billede pstric Nybegynder
08. januar 2001 - 15:04 #4
Eller Delphi
Avatar billede disky Nybegynder
08. januar 2001 - 15:07 #5
Nu skrev han program, og hevrken perl eller php kan kaldes for et program, det er jo script sprog.

Men ja, det kan nok godt bruges.
Avatar billede pstric Nybegynder
08. januar 2001 - 15:09 #6
Han skrev også batch programmering
Avatar billede disky Nybegynder
08. januar 2001 - 15:11 #7
Jeg citerer: \'Jeg har brug for et program\'

Ja længere nede skriver han at han har prøvet med batch programmering, men siden han nævner dos drejer det sig nok om en .bat fil og ikke noget serverside script sprog. ja perl kan også bruges på selve maskinen, men er mere til linux.

Men Delphi som du selv foreslog kan også bruges
Avatar billede erikjacobsen Ekspert
08. januar 2001 - 15:13 #8
Perl er et ganske fortrinligt til Win32-platformen, omend lidt overset
Avatar billede pstric Nybegynder
08. januar 2001 - 15:13 #9
Det jeg mente med min kommentar var bare, at han nok er ret ligeglad med hvordan det er lavet. Det ville jeg i hvert fald være. Ved noget så langsomt som diskaccess ville selv go\'e gamle MyreSnak kunne følge med :-)
Avatar billede olebole Juniormester
08. januar 2001 - 15:14 #10
disky >> Hvis han vidste, hvad han skulle bruge, stille han vel næppe et spørgsmål - og da han nu stiller et spørgsmål, er det vel blot et udslag af venlighed, at folk ridser hans options op.
Har du selv et bedre forslag - altså til et færdigt program - ville det da være et nydeligt træk i din karakter at fortælle ham om det :))
/mvh
Avatar billede NanoQ Nybegynder
08. januar 2001 - 15:20 #11
På min arbejdsplads havde vi brug for en lignende utility.

Vi havde brug for et stykke software, der kunne holde øje med en stribe biblioteker. Når filer i disse biblioteker f.eks. ikke har været rørt i 3 uger, skal de i nogle tilfælde slettes, og andre flyttes.

Jeg fandt Automated File Deletion System fra Wescosoft. Dette har vi nu implementeret, og det har fungeret upåklageligt. Se mere på http://www.wescosoft.com/afds_features.htm

Mvh.
NanoQ
Avatar billede disky Nybegynder
08. januar 2001 - 15:20 #12
olebole: som jeg skrev en java application, og nej jeg gider ikke lave programmet for ham.
Avatar billede olebole Juniormester
08. januar 2001 - 15:26 #13
Ja, det ved jeg godt, du skrev - men hvilket serverside sprog, man skriver applikationen i, er vel ligegyldigt...!?!
Hvad er der galt i at nævne, det også kan skrives i de andre sprog - udover Java, som var det, du nævnte? :))
/mvh
Avatar billede disky Nybegynder
08. januar 2001 - 15:29 #14
der blev nævnt PHP som er et server side sprog, hvor relevant er det ??

Og perl ja til linux, det kan godt være det også virker under windows hvis man gider bøvle med installation (sikkert på standard besværlig linux maner) Men windows folk kender normalt ikke perl.

Men vi kan da godt komme med en liste over alle de mulige sprog der eventuelt kan anvendes, hvis du synes det er smart.
Jeg vil så starte med Java,c,c++,basic,vb,qbasic,fortran,lisp,cobol, osv

synes du det er relevant ?
Avatar billede pstric Nybegynder
08. januar 2001 - 15:31 #15
Så, kan I nu lade være med at stå og spytte!!!
Avatar billede disky Nybegynder
08. januar 2001 - 15:33 #16
hehehe
Avatar billede erikjacobsen Ekspert
08. januar 2001 - 15:34 #17
Der er nu intet besværligt med Perl og Win32... Her er et script der gør det
ønskede

$dir=\'C:/erik\';
opendir(D,$dir);
while ($f=readdir(D)) {
  @a=stat(\"$dir/$f\");
  $days=int((time()-$a[9])/(60*60*24));
  if ($days>31) {
    unlink(\"$dir/$f\");
    print \"$dir/$f slettet $days dage gammel\\n\";
  }
}
closedir(D);
Avatar billede erikjacobsen Ekspert
08. januar 2001 - 15:37 #18
ok ok - for ikke at forsøge at slette kataloger skal man:

$dir=\'C:/erik\';
opendir(D,$dir);
while ($f=readdir(D)) {
  if (-f \"$dir/$f\") {
    @a=stat(\"$dir/$f\");
    $days=int((time()-$a[9])/(60*60*24));
    if ($days>31) {
      unlink(\"$dir/$f\");
      print \"$dir/$f slettet $days dage gammel\\n\";
    }
  }
}
closedir(D);
Avatar billede pstric Nybegynder
08. januar 2001 - 15:37 #19
Elegant!
Avatar billede Slettet bruger
08. januar 2001 - 15:37 #20
Okay - jeg er godt klar over dette kan laves i de fleste sprog. Jeg var egentligt blot interesseret i om folk havde nogle små foreslag til kommandoer man kunne bruge til at løse dette problem på.. Evt. eksempler på at finde ud af om en fil er over en måned gammel..
Tak for foreløbigt mange svar!

Mvh. Atropine/RubberSoul
Avatar billede olebole Juniormester
08. januar 2001 - 15:39 #21
Spytter ikke...undrer mig blot dybt...!!!
Bruger selv PHP til præcist det her...funker upåklageligt! Kører i fastlagte intervaller via et cronjob.
Ja, det finder jeg meget mere relevant end pubertært brok over det, de andre foreslår! :)))
/mvh
Avatar billede pstric Nybegynder
08. januar 2001 - 15:39 #22
Hvad er a[9] for en størrelse? Create eller Last access?
Avatar billede Slettet bruger
08. januar 2001 - 15:40 #23
erikjacobsen,

Genialt, hurtigt og enkelt! Mange tak. Da jeg ikke er inde i Perl, kan du så fortælle mig, hvordan jeg kan konvertere så jeg kan bruge det...? Pft.
Avatar billede disky Nybegynder
08. januar 2001 - 15:41 #24
olebole: du er da et brok hoved.

hvor mange standard windows maskiner tror du har installeret PHP som kan køres via et cron job ???

Nej vel, ikke særligt mange.

Java skal også installeres, men det er uhyggeligt meget nemmere end både perl og php.

Og drop nu det brok
Avatar billede pstric Nybegynder
08. januar 2001 - 15:42 #25
olebole>> Det var ikke dig der skulle føle dig ramt.

Øh, det var det vel egentlig *GG*
Avatar billede erikjacobsen Ekspert
08. januar 2001 - 15:44 #26
$a[9] er vist sidste ændring. Check selv: http://www.perl.com/pub/doc/manual/html/pod/perlfunc/stat.html
... konvertere til hvad ? Du kan hente perl på
http://www.activestate.com - ganske gratis omend et par MB
Avatar billede disky Nybegynder
08. januar 2001 - 15:47 #27
ja det med at der bare står $a[9] som åbenbart betyder sidste ændringer, er endnu en af de ting der gør at jeg synes perl er et grimt sprog.

Hvis man ikke er hardcore perl programmør så er mange andres programmer totalt uforståelige.
Avatar billede pstric Nybegynder
08. januar 2001 - 15:51 #28
Men det var nu ret nemt for en Perl analfabet at regne ud at stat() returnerede filinfo. Og det tog ikke lang tid at se, hvad der var sidste ændring og hvad der var sidste access.
Avatar billede disky Nybegynder
08. januar 2001 - 15:53 #29
ja men stadigvæk ulogiske i forhold nyere pænere sprog.

Jeg har desværre på min arbejdsplads set alt for mange eksempler på det mareridt folk ender i når de skal rette fejl i tidligere ansattes perl kode. Og det skyldes netop sådanne ting som du lige nævnte.
Og lad nu være med at påstå at vores programmører ikke er dygtige, for det er de.

EOD !!!
Avatar billede pstric Nybegynder
08. januar 2001 - 15:55 #30
QED !!!
Avatar billede erikjacobsen Ekspert
08. januar 2001 - 15:56 #31
Det er vel pga en dårlig kodningsstandard i firmaet. For 13 linier (øv - ikke 10) er
det ligegyldigt, for det er standard teknikker - men for store systemer skal
man natuirligvis gøre det ordentligt, f.eks. give nogle sigende navne...
Avatar billede olebole Juniormester
08. januar 2001 - 15:58 #32
pstric   >> NEMLIG...!!!  ;)))
Avatar billede disky Nybegynder
08. januar 2001 - 15:59 #33
Nej det er det ikke.

Enhver god programmør bruger ALTID fornuftige navne til variabler. For små programmer kan godt blive store.
Avatar billede Slettet bruger
08. januar 2001 - 16:06 #34
Den sidste kom hvis ikke med: erikjacobsen - du er nødt til lige at oprette et svar hvis du vil have nogle points..
:-)
Avatar billede Slettet bruger
08. januar 2001 - 16:12 #35
erikjacobsen,

Tjah.. Det virker ikke - den sletter ALLE filer i det pågældende bibliotek.
Avatar billede erikjacobsen Ekspert
08. januar 2001 - 16:27 #36
Det er for sent med point når du har accepteret - men skidt med det...

Men øh, det virker nu hos mig .... Har du overhovedet nyere filer?
Kan vi se dit script?
Avatar billede Slettet bruger
08. januar 2001 - 16:36 #37
Jeg lagde scriptet i en folder \'test\', hvor jeg også oprettede nogle filer. Det hele forsvandt da jeg kørte scriptet.

$dir=\'C:/test\';
opendir(D,$dir);
while ($f=readdir(D)) {
  if (-f \"$dir/$f\") {
    @a=stat(\"$dir/$f\");
    $days=int((time()-$a[9])/(60*60*24));
    if ($days>31) {
      unlink(\"$dir/$f\");
      print \"$dir/$f slettet $days dage gammel\\n\";
    }
  }
}
closedir(D);

Hvad kan der være galt??
Avatar billede erikjacobsen Ekspert
08. januar 2001 - 21:40 #38
Ja, noget må der være galt. Jeg gjorde præcis det samme, og det virkede.
Hvilken version af Perl er det (skriv perl -v ) og hvilket operativsystem er det?
Kør dette script, og kopier resultatet herud:

$dir=\'C:/test\';
opendir(D,$dir);
while ($f=readdir(D)) {
  if (-f \"$dir/$f\") {
    @a=stat(\"$dir/$f\");
    print \"$dir/$f tid: $a[9] (nu: \".time().\")\\n\";
#    $days=int((time()-$a[9])/(60*60*24));
#    if ($days>31) {
#      unlink(\"$dir/$f\");
#      print \"$dir/$f slettet $days dage gammel\\n\";
#    }
  }
}
closedir(D);
Avatar billede Slettet bruger
09. januar 2001 - 08:16 #39
Hey - vent.. Tror det var mig der dummede mig i går. Det virker fint nu. Tusind tak for hjælpen. Et sidste spørgsmål... Hvis jeg skal have dette script til at køre fra et bibliotek og så chekke alle underbiblioteker - hvordan kan jeg så gøre det? (underbiblioteket der er for gammelt, skal også slettes.)

Jeg burde oprette et nyt spørgsmål, så du kan få dine points Erik. Dette er virkelig en stor hjælp.
Avatar billede erikjacobsen Ekspert
09. januar 2001 - 09:51 #40
Okay .... jamen det er faktisk heller ikke så bøvlet at gøre det i underkataloger...
Jeg skal lige noget andet først - mener du at tomme underkataloger skal fjernes,
for hvis der er nyere filer i, så skal de vel blive stående....
Avatar billede erikjacobsen Ekspert
09. januar 2001 - 10:16 #41
Ok - jeg nåede det lige. Jeg har afprøvet det, men du skal være advaret om
at det kan være farligt! Jeg udelukker kataloger ovenover startkataloget ved
at teste for \'..\' - ellers vil du pludselig risikere at slette på hele din harddisk.
Jeg tror det virker - jeg har prøvet det på min egen PC, med mange
vigitige filer - jeg turde godt, men der en lille risiko ved det, specielt jo hvis
du piller i den linie med \'.\' og \'..\'

Hmm, jeg tror da jeg skal have ryddet automatisk op i mit temp-katalog
med dette script hver gang jeg starter!

$startdir=\'C:/test\';
push(@dir,$startdir);
while ($dir=pop(@dir)) {
  opendir(D,$dir);
  while ($f=readdir(D)) {
    if (-d \"$dir/$f\" && $f ne \'.\' && $f ne \'..\') {
      push(@dir,\"$dir/$f\");
    } elsif (-f \"$dir/$f\") {
      @a=stat(\"$dir/$f\");
      $days=int((time()-$a[9])/(60*60*24));
      if ($days>31) {
        unlink(\"$dir/$f\");
        print \"$dir/$f slettet $days dage gammel\\n\";
      }
    }
  }
  closedir(D);
  if ($dir ne $startdir) {
    rmdir($dir); # only removed if empty
    print \"$dir slettet, det var tomt\\n\";
  }
}
Avatar billede Slettet bruger
09. januar 2001 - 10:17 #42
Lige præcis - hvis mapperne er tomme skal disse også slettes.
Avatar billede erikjacobsen Ekspert
09. januar 2001 - 10:18 #43
Nå ja, hvis den besked med kataloget skal give mening, altså
kun skrives ud hvis der faktisk bliver slettet noget, skal du jo:

  if ($dir ne $startdir) {
    if (rmdir($dir)) { # only removed if empty
      print \"$dir slettet, det var tomt\\n\";
    }
  }
Avatar billede Slettet bruger
09. januar 2001 - 10:20 #44
Kanon!! Tusind tak - hvordan ordner vi det sådan at du får nogle gode points for det her? Skal jeg oprette et nyt spm?
Avatar billede Slettet bruger
09. januar 2001 - 10:22 #45
Jeg kan evt. give en øl når jeg nu flytter til Århus :-)
Avatar billede erikjacobsen Ekspert
09. januar 2001 - 10:23 #46
Tag lige og prøv det grundigt af.... Men ja, opret et nyt spørgsmål
i denne kategori, overskrift: \"Point til erikjacobsen\". Skriv en link til
indeværende spørgsmål i det nye, så er den helt ok.
Avatar billede erikjacobsen Ekspert
09. januar 2001 - 10:23 #47
Ok - du kan også nøjes med en øl ;-) Point har jeg nok af!
Avatar billede Slettet bruger
09. januar 2001 - 10:30 #48
Bare iorden - flytter snart til Århus nemmerlig - kan du ikke sende din mailadresse til atropine@worldonline.dk ? Så melder jeg tilbage til dig! ;-)
Avatar billede erikjacobsen Ekspert
09. januar 2001 - 10:35 #49
<-- Klik på mit navn ude til venstre
Avatar billede zero-hero Nybegynder
23. april 2002 - 21:51 #50
hmm meget gammelt spørgsmål!! men vil da gerne lige rose jer begge erik og rubber for den måde i omgåes emnet!! i skulle være forbillede for mange af dem der kommer herind og forlanger alt muligt!
RESPEKT

\Zero-Hero aka Stefan Toft
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
Kurser inden for grundlæggende programmering

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