Städa skrivbordet (i Mac OS X) med Applescript

Tråden skapades och har fått 16 svar. Det senaste inlägget skrevs .
1

För en tid sedan postade jag ett Applescript för Mac OS 9 här på 99Mac som städade undan allt junk som tenderar att samlas på skrivbordet i olika mappar. Det scriptet jobbade med de "types"- och "creator"-koder som filer har i Mac OS 9.

http://www.99mac.com/forum/showthread.php?s=&threadid=8694

Nu har jag i samband med att jag för en tid sedan bytte till Mac OS X gjort om det scriptet för Mac OS X (som fungerar lite annorlunda och därmed så är scriptet lite annorlunda också) och här är det - fullt kommenterat:

(*
----------------------------------------------------------------
Clean up desktop, version 1.5
----------------------------------------------------------------
© Intelligent Mammals HB, Ola Andersson, 2003-07-27
Ola@intelligentmammals.com
http://www.intelligentmammals.com/

Detta script skapar en mapp "Upphittat" på skrivbordet om den inte finns. In den mappen skapas sedan ett antal olika mappar, återigen om de inte finns.

Applikationer
Databaser
Bilder
Filmer
Packade filer
PDF
Text
URL
Övrigt

Sedan flyttas alla frivsvävande objekt från skrivbordet in i sina respektive mappar och scriptet avslutar med att städa skrivbordet (OBS, detta sista steg är ej tillgängligt i Mac OS X ännu).

Jag skapade detta manus dels för att jag alltid verkar få en massa junk på skrivbordet och dels för att lära mig skapa mappar och flytta omkring saker.

En brist med detta manus är att saker som fysiskt ligger på skrivbordet på andra diskar än StartUp Disk kommer att kopieras till StartUp Disk och därmed även ligga kvar på skribordet.

Detta manus finns i en variant för Mac OS 9 som är annorlunda uppbyggt.

Längst ner i manuset så kan du lägga till de objekt du vill ha kvar på skrivbordet efter städningen.

*)

tell application "Finder"
activate
(* UPPHITTAT
Skapa mappen "Upphittat" på skrivbordet om den inte finns.
*)
set thefolder to "Upphittat"
if exists folder thefolder then
set thefolder to item thefolder as alias
else
make new folder with properties {name:"Upphittat"}
set thefolder to result
end if

(* APPLIKATIONER
Skapa mappen "Applikationer" i mappen "Upphittat" på skrivbordet om den inte finns.
*)
set appfolder to ((thefolder as string) & ("Applikationer" as string))
if exists folder appfolder then
set appfolder to item appfolder as alias
else
make new folder at thefolder with properties {name:"Applikationer"}
set appfolder to result
end if
(*
Här är filtyperna för applikationer filer som stöds av detta script
*)
set appTypes to {"APP"}

(* BILDER
Skapa mappen "Bilder" i mappen "Upphittat" på skrivbordet om den inte finns
*)
set imagefolder to ((thefolder as string) & ("Bilder" as string))
if exists folder imagefolder then
set imagefolder to item imagefolder as alias
else
make new folder at thefolder with properties {name:"Bilder"}
set imagefolder to result
end if
(*
Här är filtyperna för bilder som stöds av detta script.
*)
set imageTypes to {"BMP", "EPS", "GIF", "JPG", "PCT", "PICT", "PSD", "TIF", "TIFF"}

(* DATABASER
Skapa mappen "Databaser" i mappen "Upphittat" på skrivbordet om den inte finns
*)
set dbfolder to ((thefolder as string) & ("Databaser" as string))
if exists folder dbfolder then
set dbfolder to item dbfolder as alias
else
make new folder at thefolder with properties {name:"Databaser"}
set dbfolder to result
end if
(*
Här är filtyperna för databaser som stöds av detta script.
*)
set dbTypes to {"FP3", "FP5"}

(* FILMER
Skapa mappen "Filmer" i mappen "Upphittat" på skrivbordet om den inte finns
*)
set moviefolder to ((thefolder as string) & ("Filmer" as string))
if exists folder moviefolder then
set moviefolder to item moviefolder as alias
else
make new folder at thefolder with properties {name:"Filmer"}
set moviefolder to result
end if
(*
Här är filtyperna för filmer som stöds av detta script.
I ordning, QuickTime, MPEG och AVI.
*)
set movieTypes to {"MOV", "MPG", "MPEG", "WMV", "RM"}

(* PACKADE FILER
Skapa mappen "Packade filer" i mappen "Upphittat" på skrivbordet om den inte finns
*)
set stufffolder to ((thefolder as string) & ("Packade filer" as string))
if exists folder stufffolder then
set stufffolder to item stufffolder as alias
else
make new folder at thefolder with properties {name:"Packade filer"}
set stufffolder to result
end if
(*
Här är filtyperna för packade filer som stöds av detta script
*)
set stuffTypes to {"DMG", "GZIP", "PKG", "SEA", "SIT", "SMI", "TGZ", "ZIP"}

(* PDF
Skapa mappen "PDF" i mappen "Upphittat" på skrivbordet om den inte finns
*)
set pdffolder to ((thefolder as string) & ("PDF" as string))
if exists folder pdffolder then
set pdffolder to item pdffolder as alias
else
make new folder at thefolder with properties {name:"PDF"}
set pdffolder to result
end if
(*
Här är filtypen för pdf-filer som stöds av detta script
*)
set pdfTypes to {"PDF"} -- Obs, mellanslag efter PDF.

(* TEXT
Skapa mappen "TEXT" i mappen "Upphittat" på skrivbordet om den inte finns
*)
set txtfolder to ((thefolder as string) & ("TEXT" as string))
if exists folder txtfolder then
set txtfolder to item txtfolder as alias
else
make new folder at thefolder with properties {name:"TEXT"}
set txtfolder to result
end if
(*
Här är text-filsformaten som stöds av detta script
I ordning: Word, BBEDIT/Skriv Text, Urklipp.
*)
set txtTypes to {"DOC", "TXT", "clpt", "textClipping"}

(* URL
Skapa mappen "URL'er" i mappen "Upphittat" på skrivbordet om den inte finns
*)
set urlfolder to ((thefolder as string) & ("URL's" as string))
if exists folder urlfolder then
set urlfolder to item urlfolder as alias
else
make new folder at thefolder with properties {name:"URL's"}
set urlfolder to result
end if
(*
Här är url-formaten som stöds av detta script
*)
set urlTypes to {"LINK", "URL"}

(* ÖVRIGT
Skapa mappen "Övrigt" i mappen "Upphittat" på skrivbordet om den inte finns
*)
set otherfolder to ((thefolder as string) & ("Övrigt" as string))
if exists folder otherfolder then
set otherfolder to item otherfolder as alias
else
make new folder at thefolder with properties {name:"Övrigt"}
set otherfolder to result
end if

(*
Variabler för listor över filer
*)
set appFiles to {}
set dbFiles to {}
set ImageFiles to {}
set MovieFiles to {}
set stuffFiles to {}
set PdfFiles to {}
set txtFiles to {}
set urlFiles to {}
set otherFiles to {}


(*
Vi skapar ett antal listor med filer av varje typ.
*)
tell desktop
-- APPLIKATIONER
repeat with extension in appTypes
set appFiles to appFiles & (files whose name extension is extension)
end repeat
-- BILDER
repeat with extension in imageTypes
set ImageFiles to ImageFiles & (files whose name extension is extension)
end repeat
-- DATABASER
repeat with extension in dbTypes
set dbFiles to dbFiles & (files whose name extension is extension)
end repeat
-- FILMER
repeat with extension in movieTypes
set MovieFiles to MovieFiles & (files whose name extension is extension)
end repeat
-- PDF
repeat with extension in pdfTypes
set PdfFiles to PdfFiles & (files whose name extension is extension)
end repeat
-- STUFFED
repeat with extension in stuffTypes
set stuffFiles to stuffFiles & (files whose name extension is extension)
end repeat
-- TXT
repeat with extension in txtTypes
set txtFiles to txtFiles & (files whose name extension is extension)
end repeat
-- URL
repeat with extension in urlTypes
set urlFiles to urlFiles & (files whose name extension is extension)
end repeat
-- ÖVRIGT
-- Som mappar och andra filtyper får jag ordna med senare.
end tell

(*
Flytta alla filer och mappar!
*)
move appFiles to appfolder as alias
move dbFiles to dbfolder as alias
move ImageFiles to imagefolder as alias
move MovieFiles to moviefolder as alias
move PdfFiles to pdffolder as alias
move stuffFiles to stufffolder as alias
move txtFiles to txtfolder as alias
move urlFiles to urlfolder as alias
-- Vi behöver även flytta alla mappar utom upphittat.
set allFolders to every folder of desktop whose name is not "Upphittat"
(*
Första mappen som ovanstående kommando hittar är hårddisken
Vi skriver nedanstående för att ta bort första objektet från
ur listan med mappar på skrivbordet.
*)
set allFolders to the rest of allFolders
move allFolders to otherfolder as alias
-- Vi flyttar även alla filer
set allFiles to every file of desktop
move allFiles to otherfolder as alias

(*
Om man vill ha flera mappar/filer liggande på skrivbordet, förutom "Upphittat", så kan man här lägga till några rader på följande form som flyttar tillbaka de objekt man vill ha kvar på skrivbordet ur mappen "Upphittat" och dess undermappar.. Tag bort minustecknen bara och ändra filnamnet/mappen till det det skall vara. Nedan hittar du två exempel, dels för en folder och dels för en fil.
*)

move file "CleanUp.app" of appfolder as alias to desktop
move folder "Installerare" of otherfolder as alias to desktop

(*
I Mac OS X saknas stöd för ett Applescript-kommando som stöds i Mac OS 9:

clean up desktop.

Det kommandot tar och placeerar de objekt/hårddiskar och annat man har på skrivbordet i god ordning. Det kommandot kommer att dyka upp i en kommande version av Mac OS X men finns inte i skrivande stund.
*)

-- clean up desktop by name

end tell

Min förhoppning är att båda scripten tillsammans ger er en god inblick i hur man skriver för att flytta omkring filer och mappar.

Lycka till!

/Ola

En bild av hur det ser ut när det är städat och klart.

/Ola

Bugg - Alla anslutna hårddiskar kopieras till Upphittat
Då jag normalt inte har mina externa hårddiskar inkopplade i min dator så upptäckte jag först nu att det finns en liten bugg i scriptet ovan och så vill jag göra ett annat tillägg också.

Denna rad, returnerar tyvärr alla anslutna hårddiskar också:

set allFolders to every folder of desktop whose name is not "Upphittat"

Så när raden efteråt försöker kopiera allFolders så betyder det att en kopiering av innehållet på alla anslutna hårddiskar till mappen "Upphittat:Övrigt" startar. Inte bra.

Så gör ett par ändringar enligt nedan:
set allFolders to every folder of desktop whose name is not "Upphittat" and kind is not "Enhet"

Stryk även dessa rader, då de inte längre är nödvändiga:

(*
Första mappen som ovanstående kommando hittar är hårddisken
Vi skriver nedanstående för att ta bort första objektet från
ur listan med mappar på skrivbordet.
*)
set allFolders to the rest of allFolders

Fattigmans CleanUp
Som det står längst ner i manuset så stöds inte kommandot Clean Up Desktop i Mac OS X, så därför skrev jag nedanstående lilla snutt som får fungera som en "fattigmans CleanUp" som du kan lägga till i ditt manus:

(*
Tills dess clean up desktop stöds så kör vi med nedanstående "fattigmans clean up":

Detta manus "städar" lite på skrivbordet genom att flytta vissa objekt till en ny mapp och sedan lägga tillbaka dem igen och även radera mappen de kom ifrån. Det gör att objekten hamnar i den ordning man vill.
*)

if folder "Temp xyz" of desktop exists then
set TargetFolder to folder "Temp xyz" of desktop as alias
else
make new folder at desktop with properties {name:"Temp xyz", position:{100, 100}}
end if
set TargetFolder to the result

if file "CleanUp.app" of desktop exists then
move file "CleanUp.app" to TargetFolder
end if

if file "Maila Stefan.app" of desktop exists then
move file "Maila Stefan.app" to TargetFolder
end if

if folder "Installerare" of desktop exists then
move folder "Installerare" to TargetFolder
end if

if folder "Upphittat" of desktop exists then
move folder "Upphittat" to TargetFolder
end if

move every item of TargetFolder to desktop

move TargetFolder to trash

Flera filtyper tillagda
Har lagt till ett par filtyper.

webloc i listan för URL (Safari skapar sådana när du drar URL'en i adressfältet till skrivbordet)

(*
Här är url-formaten som stöds av detta script
*)
set urlTypes to {"LINK", "URL", "WEBLOC"}

På samma sätt lade jag till RTF bland textformaten. Komplettera själv filformaten efter dina behov.

Så!

Enjoy!

/Ola

  • Medlem
  • 2003-08-15 13:06

Ola,

TACK!

Great! Precis vad jag har letat efter. Började hacka på ett eget script & av en ren händelse så såg jag det här inlägget.

Sparade mig ett antal timmar och dessutom har jag numer ett rent skrivbord. Passar perfekt i min samling av Scriptar jag har i Script menyn.

För Er som inte har upptäckt styrkan med Applescript är det här scriptet ett utmärkt exempel på hur man kan automatisera jobb och därmed effektivisera sitt arbete vid dumburken.

Mvh
/Ulf

Kul med lite beröm, tack!

Här kommer den senaste versionen av scriptet som jag har, alltså med de rättelser jag berättat om ovan.

Här är filen i alla fall! Spara om den som kopilerat manus genom att öppna den i Script Editor (Manusredigeraren).

/Ola

Jag har aldrig orkat sätta min in i Applescript, men det här är fantastiskt!! Nu ser jag massa saker som jag kan låta AS göra åt mig.

Tack!

Citat:

Skrevs ursprungligen av Stefan Strandberg
Jag har aldrig orkat sätta min in i Applescript, men det här är fantastiskt!! Nu ser jag massa saker som jag kan låta AS göra åt mig.

Tack!

Samma här! Har varit ute på nätet och laddat ner plenty!

Tack Taz, för att du visade oss ljuset!

/Bosse

  • Medlem
  • Stockholm
  • 2005-05-09 14:00

Fungerar det här för Tiger då?

  • Medlem
  • Uppsala
  • 2005-05-29 02:47

Jajamen, funkar perfekt i min Tiger (G4 - 2X1.25)

Jag vill också tacka för scriptet - kanon!
/Yankee

  • Medlem
  • Helsingborg
  • 2005-05-30 22:55

Hehe Klart nu kan man göra det ganska lätt i Automator Fin fint skript iaf!

  • Medlem
  • Höganäs
  • 2005-05-31 10:25

Funkar kanonfint, förutom att mappan "Upphittat" försvinner från skrivbordet, trots att den finns i mappen Skrivbort i min hem-mapp. Om jag startar om Finder eller loggar ut/in finns den där igen.
Konstigt.

Annars toppen, som sagt!

  • Medlem
  • Kalmar
  • 2005-07-19 22:54

Perfekt skript.

Tsh

  • Medlem
  • Örebro
  • 2006-05-30 09:52

En annan variant

Tack för ett bra script som öppnade mina AppleScript-ögon.

Funderade ett tag på hur jag vill att scriptet ska fungera i min dator och gjorde därför nedanstående variant. Testa gärna och återkom om ni gillar det.

Har försökt göra scriptet på så vis att det bara skapar de mappar som det verkligen finns filtyper till. Det är också ganska lätt att påverka vilka mappar man vill ha och vad dom ska innehålla.

Men som sagt prova gärna själv.

/Mats-Olof Liljegren

---------------------------------------------------------------------
-- Script to clean up the desktop folder
-- Made by e-pro, www.e-pro.se Mats-Olof Liljegren 2006
-- Use on your own risk!
-- You are free to use it and to change it after your need.
-- Pleace send me a copy if you make progress to the script.
---------------------------------------------------------------------

-- cleanupFolder = name of folder to put stuff in
set cleanupFolder to "Rensat skrivbord" as string

-- otherStuffFolder = name of folder to put not sortet files and folders in
set otherStuffFolder to "Övrigt" as string

-- Make lists of every filetype you want to sort in new folders in the cleanupFolder
-- First name is the new folder name for each file type
-- Make as many as you like
set fileType1 to {"Program", "APP"}
set fileType2 to {"Bilder", "BMP", "EPS", "GIF", "JPG", "PCT", "PICT", "PSD", "TIF", "TIFF", "PNG", "WBMP"}
set fileType3 to {"Databaser", "FP3", "FP5", "FP7"}
set fileType4 to {"Filmer", "MOV", "MPG", "MPEG", "WMV", "RM"}
set fileType5 to {"Ljud", "MP3", "waw"}
set fileType6 to {"Paket", "DMG", "GZIP", "PKG", "SEA", "SIT", "SMI", "TGZ", "ZIP", "RAR", "MPKG", "TAR"}
set fileType7 to {"PDF", "PDF"}
set fileType8 to {"Text", "DOC", "TXT", "clpt", "textClipping", "RTF"}
set fileType9 to {"Länkar", "LINK", "URL"}
set fileType10 to {"Flash", "FLA", "SWF"}
set fileType11 to {"CD-DVD-Master", "CDR", "cdr"}
set fileType12 to {"Excell", "xls"}
set fileType13 to {"AppleScript", "scpt"}

-- IMPORTANT
-- Put all file types in an array
set allTypes to {fileType1} & {fileType2} & {fileType3} & {fileType4} & {fileType5} & {fileType6} & {fileType7} & {fileType8} & {fileType9} & {fileType10} & {fileType11} & {fileType12} & {fileType13}

-- Error message if somethings goes wrong
set errorMessage to "Något gick fel, försök igen om du törs!"

try
tell application "Finder"
activate

-- Go through all types and get files for each type on desktop
set i to 1
repeat count allTypes times
set nameOnfolder to (item 1 of item i of allTypes) as string
set (item 1 of item i of allTypes) to every file of desktop whose name extension is in (item i of allTypes)

if (item 1 of item i of allTypes) is not {} then

if exists folder cleanupFolder then
set cleanupFolderAlias to item cleanupFolder as alias
else
make new folder with properties {name:cleanupFolder}
set cleanupFolderAlias to result
end if

set subFolder to ((cleanupFolderAlias as string) & (nameOnfolder as string))
if exists folder subFolder then
set subFolder to item subFolder as alias
else
make new folder at cleanupFolderAlias with properties {name:nameOnfolder}
set subFolder to result
end if
move (item 1 of item i of allTypes) to subFolder as alias
end if
set i to i + 1
end repeat


-- Get all folders on Desktop except the cleanupfolder and mounted disks
set otherStuffFolders to every folder of desktop whose name is not cleanupFolder and kind is not "enhet"
-- Get all files that are left on desktop
set otherStuffFiles to every file of desktop

if otherStuffFolders is not {} then

if exists folder cleanupFolder then
set cleanupFolderAlias to item cleanupFolder as alias
else
make new folder with properties {name:cleanupFolder}
set cleanupFolderAlias to result
end if

set subFolder to ((cleanupFolderAlias as string) & (otherStuffFolder as string))
if exists folder subFolder then
set subFolder to item subFolder as alias
else
make new folder at cleanupFolderAlias with properties {name:otherStuffFolder}
set subFolder to result
end if
move otherStuffFolders to subFolder as alias
end if


if otherStuffFiles is not {} then

if exists folder cleanupFolder then
set cleanupFolderAlias to item cleanupFolder as alias
else
make new folder with properties {name:cleanupFolder}
set cleanupFolderAlias to result
end if

set subFolder to ((cleanupFolderAlias as string) & (otherStuffFolder as string))
if exists folder subFolder then
set subFolder to item subFolder as alias
else
make new folder at cleanupFolderAlias with properties {name:otherStuffFolder}
set subFolder to result
end if
move otherStuffFiles to subFolder as alias
end if

end tell
on error
display dialog errorMessage
end try

Skojigt att denna gamla diskussion dyker upp igen och igen. Prova tex att googla på svenska sidor på applescript så dyker en annan av mina script-trådar upp som fjärde träff eller så.

Såg en del fiffiga rader i scriptet som är smått genialiska i sin enkelhet, bra jobbat.

Applescript är kul!

  • Medlem
  • International user
  • 2007-04-25 17:52

Grymt skript! Tack!

Ser användbart ut. Tackar, tackar!

2023 visningar hitills. Det är kul tycker jag.

1
Bevaka tråden