Skript som kastar filer äldre än 60 minuter?

Tråden skapades och har fått 16 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • 2007-06-29 11:24

Jag är intresserad av ett skript som kastar filer som är äldre än 60 minuter. Skriptet kan köras hela tiden och repeteras typ var femte minut.

Finns detta? Om inte, hur skulle det formuleras?

  • Medlem
  • Stockholm
  • 2007-06-29 12:02

Pratar vi shellskript?
Denna snutt hittar alla filer (-type f) nedåt i katalogstrukturen (från snuttens startkatalog ".") som är äldre än 60 minuter (-mmin +60).

Flaggan "-exec" kör kommandot som står efter och "{} \;" innebär att det körs på objektet (filen) som find-kommandot hittar, i det här exemplet listar den filerna med full information.

find . -type f -mmin +60 -exec ls -la {} \;

Om man vill göra det till ett skript kan det se ut så här:

#!/bin/bash
MYDIR=<full sökväg till katalogen>
find $MYDIR -type f -mmin +60 -exec ls -la {} \;
# Om du vill radera filen, kör med detta istället:
# find $MYDIR -type f -mmin +60 -exec rm {} \;

Kan köras via cron, eller möjligtvis så här, så att det vilar i fem minuter mellan varje sökning:

#!/bin/bash
MYDIR=<full sökväg till katalogen>
while true; do
 find $MYDIR -type f -mmin +60 -exec ls -la {} \;
# Om du vill radera filen, kör med detta istället:
# find $MYDIR -type f -mmin +60 -exec rm {} \;
 sleep 300;
done

Avbryt skriptet med ctrl-c.

Lägg inte skriptet i samma katalog som filerna du söker efter, eftersom skriptet då kommer att radera sig själv när det blir äldre än en timme.

När du testar rm-kommandot i skriptet kan det vara smart att lägga på flaggan "-i" så att du får konfirmera varje borttagning, ifall det skulle blir nåt konstigt.

Snyggt macce! Så ska det se ut!

  • Medlem
  • Mölndal
  • 2007-06-29 12:19

Ja, det var snyggt!

Ett alternativ är ju att flytta filerna till en mapp (papperskorgen?) istället för att radera dem rakt av.

Ursprungligen av memark:

Ja, det var snyggt!

Ett alternativ är ju att flytta filerna till en mapp (papperskorgen?) istället för att radera dem rakt av.

-exec mv {} \ ~/.Trash/

Borde fungera jag har inte testat det.

  • Medlem
  • 2007-06-29 12:41

Ser imponerande ut! Men i min snäva värld av skript reflkterade jag inte ens över att det finns nåt annat än applescpript. Jag har inte en aning om hur man använder din fina kod...

  • Medlem
  • Stockholm
  • 2007-06-29 13:02
Ursprungligen av Baron:

Ser imponerande ut! Men i min snäva värld av skript reflkterade jag inte ens över att det finns nåt annat än applescpript. Jag har inte en aning om hur man använder din fina kod...

Attans då. Jaja, någon annan kanske får användning av det någon gång. Äppleskriptande är jag ingen hejare på så det överlåter jag med glädje åt Richard R och er andra som kan.

  • Medlem
  • 2007-06-29 13:37
Ursprungligen av macce:

Attans då. Jaja, någon annan kanske får användning av det någon gång. Äppleskriptande är jag ingen hejare på så det överlåter jag med glädje åt Richard R och er andra som kan.

Det var inte bortkastat.

Hur hanterar man shellscript? Hur exekverar man?

  • Medlem
  • Stockholm
  • 2007-06-29 15:59
Ursprungligen av Baron:

Hur hanterar man shellscript? Hur exekverar man?

Ändra "MYDIR=<full sökväg till katalogen>" så att den stämmer. Full sökväg kan till exempel vara "/Users/baron/gamlafiler/", så då ska det stå:

MYDIR=/Users/baron/gamlafiler

Spara skriptet i en mapp, till exempel i "minaskript" i hemmamappen. Om du vill vara tydlig så döper du det till någonting.sh för att indikera att det är ett shellskript.

Starta Terminalen. Finns i Verktygsprogram (heter Utilities så?).

Navigera till katalogen där skriptet ligger.

cd /Users/baron/minaskript

Det går även att skriva "cd " och sedan dra mappen från Finder till Terminalen om man inte orkar skriva hela vägen. Tryck Enter. (Är jag kanske övertydlig nu...?)

Se till så att skriptet blir exekverbart.

chmod +x skriptnamn.sh

Kör det genom att skriva namnet med punkt slash innan.

./skriptnamn.sh

Punkt slash betyder att man talar om för Terminalen att "leta i den här katalogen där jag står efter skriptnamn.sh, och ingen annanstans".

Skriptet startar och körs tills du avbryter det genom att trycka ctrl-c eller stänger Terminalen.

Jag misstänker att det går att göra ett alias till skriptfilen så att det går att köra genom musklick också. Testa!

Alternativt kan man använda ett Stay open-AppleScript med en s.k. Idle Handler som periodiskt kollar och tömmer

Det bifogade scriptet har två värden som är intressanta:

3600, som står för hur gammal filen måste vara i sekunder för att den ska kastas

5, som anger hur tätt scriptet ska titta, det här kan man sänka till ett mycket glesare intervall om man vill undvika att göra saker onödigt ofta

property myFolderToWatch : "Macintosh HD:Users:richardr:Desktop:"

on idle {}
	tell application "Finder"
		delete (document files of folder myFolderToWatch where modification date is less than ((current date) - 3600))
		--empty trash
	end tell
	return 5
end idle
  • Medlem
  • 2007-06-29 13:52

Och tack även till Richard!

  • Medlem
  • Stockholm
  • 2007-06-29 14:43

Kör dom i terminalen

  • Medlem
  • 2007-06-29 16:10

Härligt! Tack!

  • Medlem
  • 2007-06-29 18:29

Personligen skulle jag använda "Lingon" för att aktivera scriptet och att det aktiveras då var 5:e minut, istället för Cron eller att aktivera det via Terminalen.

Eller använda AppleScript

Det finns som bekant många sätt att flå en katt, men fördelen med ett AppleScript av min typ är att man har ett enkelt gränssnitt för att starta och stoppa det och inte behöver crontab-filer etc.

Får man fråga vad du ska använda scriptet till? Alltså mer praktiskt (jag fattar att du ska ha det till att slänga saker), men vad är det för mapp som är nyttig att tömma varje timme.

  • Medlem
  • 2007-07-01 23:33

Vi har ett nytt backupsystem som gör att vi skapar en kopia varje gång vi sparar i ett InDesigndokument. Vi tryckte igång systemuppgraderingen som innehåller backupfunktionen innan vi hade sett till att vi hade tillräckligt med lagringsutrymme att spara på.
Vi är kanske 30-40 samtidiga användare som hanterar 3-10 dokument på mellan 3 och 10 MB per person varje dag. Det lediga utrymmet på volymen tog helt enkelt slut. 60 minuter var bara ett värde. Jag gissade att man skulle kunna ändra det värdet bara man fick kläm på hur man gick tillväga.

1
Bevaka tråden