Denna delen av 99 uppdateras inte längre utan har arkiverats inför framtiden som ett museum.
Här kan du läsa mer om varför.
Mac-nyheter hittar du på Macradion.com och forumet hittar du via Applebubblan.

sortera pdfer med Apple script eller automator?

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

jag har ett litet problem. jag ska skapa ett arkiv som sorterar pdfer som är döpta med löpnummer så att om dom är döpta xx0102 så ska dom hamna i en mapp som har nummer 01 och därifrån hoppa in i mappen 02 som ligger i mappen 01.

låter kanske rörigt men jag vet inte riktigt hur jag ska förklara det.
men om ni förstår hur jag menar finns det då ett bra sätt att göra det på?

tack på förhand

Visst. Det går att göra med AppleScript och/eller shell script

Däremot skulle du behöva säga hur PDF-filerna ligger nu, om det är ett engångsjobb, eller om det är något som ska ske löpande.

Likaså skulle man behöva veta om mapparna redan finns eller om de ska skapas

Ursprungligen av Richard Rönnbäck:

Visst. Det går att göra med AppleScript och/eller shell script

Däremot skulle du behöva säga hur PDF-filerna ligger nu, om det är ett engångsjobb, eller om det är något som ska ske löpande.

Likaså skulle man behöva veta om mapparna redan finns eller om de ska skapas

det ska vara löpande och dom trillar ner i en mapp automatiskt så det är i den mappen den skulle gå in i din "rätta" mapp is så fall. vet du om det finns några exempel eller färdiga script som man kan kolla/ladda hem?

Nej det finns knappast några färdiga script som fixar det precis som du vill ha det. Att göra såna här script med inbyggd logik som också är driftssäkra är relativt svårt.

Jag är heller inte säker på att jag förstår din förklaring: Menar du att PDF-filerna hamnar på översta nivån i en mapp och sen ska de sorteras in i undermappar till den mappen, och återigen, finns det redan mappar eller ska de skapas av scriptet?

  • Medlem
  • International user
  • 2007-03-22 14:11

Ta tre djupa andetag och berätta sedan vad du vill göra.

Ursprungligen av Wire:

Ta tre djupa andetag och berätta sedan vad du vill göra.

Sorry, scenariot ser ut såhär.

jag håller på att bygga upp ett pdf flöde med hjälp av fotostation(typ av bildbanks program), med programmet så ska jag kunna skicka en pdf till en kund och samtidigt när en kopia kommer in i en förutbestämd mapp så ska filen beroende på vad den heter (i test fallet xx0709-xxx-xxx där 07 är året och 09 är veckan) hoppa in i rätt års nummer och senare vecko nummer.

anledningen då varför jag vill göra det så är att jag vill slippa dra in pdferna i rätt mappp manuellt.hoppas det ska vara en bra förklaring men jag vet att det kanske kan vara lite luddigt

HannesP jag är lite av en kod noob så var ska jag lägga koden i xcode eller?

tack för era svar en sålänge

  • Medlem
  • Mölndal
  • 2007-03-22 14:53

Och kanske också varför.

  • Medlem
  • Simrishamn
  • 2007-03-22 17:52
#/usr/bin/perl

$dir = "/Users/Hannes/Desktop/pdf-test/";
$arc = "/Users/Hannes/Desktop/pdf-archive";

opendir(D, $dir) or die("$dir existerar inte");

mkdir($arc, 0755) unless (-d $arc);

foreach (readdir(D)) {
    /(\d{2})(\d{2})\.pdf$/;
    mkdir("$arc/$1", 0755) unless (-d "$arc/$1");
    mkdir("$arc/$1/$2", 0755) unless (-d "$arc/$1/$2");
    rename("$dir/$_", "$arc/$1/$2/$_");
}

closedir(D);

Jag hoppas att jag förstod din fråga rätt. Denna kod funkar för mig, men jag har inte testat den särskilt hårt. Jag tror inte att det är någon risk, men ifall något skulle hända, typ att alla filerna försvinner, så är det bra om du drar en säkerhetskopia av filerna först. Jag vill inte ta ansvar för några oförutsedda effekter

EDIT: jag vet inte om det framgick, men du måste alltså byta ut variablerna som innehåller mappnamnen på arkivet och namnet på mappen däri alla pdf-filerna ligger.

EDIT2: fixade en liten dumhet i koden

Senast redigerat 2007-03-22 21:11
  • Medlem
  • Simrishamn
  • 2007-03-23 20:56

Exakt hur är filerna namngivna? Är det _alltid_ "xxdddd-xxx-xxx.pdf" där x är vad som helst, och d är en siffra? Det är väldigt viktigt att veta, för att utforma uttrycket som hämtar siffrorna.

Koden är skriven i perl, och körs genom command line, men om du använder ett AppleScript som körs varje gång en ny fil hamnar i mappen, kan du köra perl-scriptet genom AppleScript:et.

  • Medlem
  • International user
  • 2007-03-23 22:06

Skriv inte perl till nybörjare.

  • Medlem
  • Simrishamn
  • 2007-03-23 22:21

Tanken var att jag skulle skriva den, och han använda den

Valet av programspråk är inte särskilt viktigt. Vad som däremot är viktigt är att EXAKT beskriva förutsättningarna, vad man vill uppnå, och hur eventuella fel ska hanteras. Så, för att kunna göra det här måste du bl.a. svara på

FÖRUTSÄTTNINGAR
1) Hur kommer PDF-filerna in i mappen? Sker det via lokal filkopiering eller via annan överföring, t.ex. FTP /HTTP. Vid annan överföring än lokal kopiering, hur länge ska scriptet vänta innan det anser att filöverföringen misslyckats
2) Kan det komma andra filtyper än PDF i mappen?
3) Har alla PDF-filer en filändelse?
4) Har alla filer läs- och skrivrättigheter för den användare som kör processen?
5) Har alla filer samma namnschema och i så fall hur ser det ut?
6) Finns mapparna som filerna ska flyttas till, och i så fall var? (återigen)
7) Har mapparna läs och skrivrättigheter för den användare som kör processen?

ÖNSKAT RESULTAT
1) Vad ska hända med filer som inte följer namnschemat?
2) Vad ska hända med andra filtyper
3) Var ska mapparna ligga? Om mapparna inte finns, ska de då skapas?
4) Vilka rättigheter ska mapparna och filerna som flyttas in i dem ha?

Ursprungligen av Richard Rönnbäck:

Valet av programspråk är inte särskilt viktigt. Vad som däremot är viktigt är att EXAKT beskriva förutsättningarna, vad man vill uppnå, och hur eventuella fel ska hanteras. Så, för att kunna göra det här måste du bl.a. svara på

FÖRUTSÄTTNINGAR
1) Hur kommer PDF-filerna in i mappen? Sker det via lokal filkopiering eller via annan överföring, t.ex. FTP /HTTP. Vid annan överföring än lokal kopiering, hur länge ska scriptet vänta innan det anser att filöverföringen misslyckats
2) Kan det komma andra filtyper än PDF i mappen?
3) Har alla PDF-filer en filändelse?
4) Har alla filer läs- och skrivrättigheter för den användare som kör processen?
5) Har alla filer samma namnschema och i så fall hur ser det ut?
6) Finns mapparna som filerna ska flyttas till, och i så fall var? (återigen)
7) Har mapparna läs och skrivrättigheter för den användare som kör processen?

ÖNSKAT RESULTAT
1) Vad ska hända med filer som inte följer namnschemat?
2) Vad ska hända med andra filtyper
3) Var ska mapparna ligga? Om mapparna inte finns, ska de då skapas?
4) Vilka rättigheter ska mapparna och filerna som flyttas in i dem ha?

FÖRUTSÄTTNINGAR
1. filerna kommer över lokalt samt afp/smb och tiden till de ska se det som misslyckat 120 sek.
2. det kommer inte andra filtyper
3. alla pdfer har en filändelse
4. fulla rättigheter i mappen men inte admin rättigheter i systemet (om det krävs)
5. har samma namn schema och det ser ut : xxdddd-xxx-xxx-xxx där x är vadsom helst och d är är datum (i formen år vecka)
6. mapparna finns inte än men tanken är att dom sdka ligga lokalt på en dator till och börja med.
7. och mapparna har fulla rättigheter

ÖNSKAT RESULTAT

1. filer som inte följer namn schemat ska flyttas till en mapp som heter typ "Okännda filer"
2. andra filer kommer inte gå igenom men om så endå skulle vara fallet så ska dom tas bort.
3. Det kommer finnas en mapp som heter "Arkiv" och i den mappen så ska det om möjligt skapas mappar om det inte finns enligt schemat (dddd biten) vilket blir att i mappen "Arkiv" så om det står xx0701-xxx-xxx-xxx så skapas en mapp (om en inte finns) som heter 07, i den mappen så skapas (också om den inte redan finns) en mapp som heter 01.
4. mapparna som skapas ska ha fulla rättigheter det gäller även filer som flyttas in i mapparna.

tack återigen för era svar

Senast redigerat 2007-03-26 09:21

Inte heller mitt svar är speciellt riktat till nybörjare, men man bör kunna lära sig att flytta omkring filer och skapa mappar om de inte redan finns med Applescript genom att läsa och lära sig av ett script jag gjort och postat här på 99Mac tidigare:

http://www.99.se/applescript/26949-staeda-skrivbordet-i-mac-os-x-med-appelscript.html

Jag har även lagt upp detta script för att städa skrivbordet på min ofärdiga Applescript-site här: http://applescript.intelligentmammals.se/ (Där finns ett par skärmbilder och en version på engelska också).

Utifrån det scriptet så kan man lägga till en del saker (namnet på mapparna, läsa av filnamn korrekt, lägga in rätt filer i rätt "lista" med filer osv) och lösa det problem du beskriver. Det är en start alltså.

Jaha. Om du nu har givit riktig information så har du här ett kombinerat AppleScript/ShellScript som flyttar alla PDF-filer som följer det namnschema du angav till mappar (som skapas om de inte finns)

Det är fyra saker du måste göra

1) Lägg bifogat script i mappen /Library/Scripts/Folder Actions Scripts
2) Dubbelklicka på scriptet och välj mappen dit dina PDF-filer ska flyttas (datummappar skapas automatiskt i denna mapp) samt mappen dit resten av dina filer ska flyttas.
3) Öppna AppleScript-verktyget och välj den mapp som ska bevakas. Koppla sedan det bifogade scriptet till den mappen
4) Tuta och kör

*OBS ! Du är själv fullt ansvarig för konsekvenserna av eventuella problem som kan uppstå i samband med användandet. Riskerna är helt minimala, men vill du ha vidareutveckling eller support så får du kontakta mig off-forum om det *

För kod-nördarna här inne så ser koden ut såhär:

property myArchiveDir : ""
property myPDF_Dir : ""

on run
	my Setup()
end run

on adding folder items to x
	try
		do shell script "SOURCEDIR=" & (POSIX path of (x)) & ";ARCHIVEDIR=" & myArchiveDir & ";TARGETDIR=" & myPDF_Dir & ";mkdir -p $ARCHIVEDIR;cd $SOURCEDIR;ls |grep \"^.\\{2\\}[0-9]\\{2\\}.*\\.pdf\\|PDF$\" | while read FN; do YY=$(echo \"$FN\" |cut -c 3-4);DD=$(echo \"$FN\" |cut -c 5-6);mkdir -p \"$TARGETDIR$YY/$DD\";mv \"$FN\" \"$TARGETDIR$YY/$DD\";done;mv * \"$ARCHIVEDIR\";"
	end try
end adding folder items to

on Setup()
	set myPDF_Dir to POSIX path of (choose folder with prompt "Välj den mapp som dina PDF-filer ska hamna i")
	if myPDF_Dir contains " " then
		display dialog "Ledsen: PDF-mappens sökväg får inte innehålla mellanslag. Välj en annan"
		my Setup()
	end if
	set myArchiveDir to POSIX path of (choose folder with prompt "Välj den mapp som resten av filerna ska hamna i")
	if myPDF_Dir contains " " then
		display dialog "Ledsen: Övrigt-mappens sökväg får inte innehålla mellanslag. Välj en annan"
		my Setup()
	end if
end Setup
Ursprungligen av Richard Rönnbäck:

Jaha. Om du nu har givit riktig information så har du här ett kombinerat AppleScript/ShellScript som flyttar alla PDF-filer som följer det namnschema du angav till mappar (som skapas om de inte finns)

Det är fyra saker du måste göra

1) Lägg bifogat script i mappen /Library/Scripts/Folder Actions Scripts
2) Dubbelklicka på scriptet och välj mappen dit dina PDF-filer ska flyttas (datummappar skapas automatiskt i denna mapp) samt mappen dit resten av dina filer ska flyttas.
3) Öppna AppleScript-verktyget och välj den mapp som ska bevakas. Koppla sedan det bifogade scriptet till den mappen
4) Tuta och kör

*OBS ! Du är själv fullt ansvarig för konsekvenserna av eventuella problem som kan uppstå i samband med användandet. Riskerna är helt minimala, men vill du ha vidareutveckling eller support så får du kontakta mig off-forum om det *

För kod-nördarna här inne så ser koden ut såhär:

property myArchiveDir : ""
property myPDF_Dir : ""

on run
	my Setup()
end run

on adding folder items to x
	try
		do shell script "SOURCEDIR=" & (POSIX path of (x)) & ";ARCHIVEDIR=" & myArchiveDir & ";TARGETDIR=" & myPDF_Dir & ";mkdir -p $ARCHIVEDIR;cd $SOURCEDIR;ls |grep \"^.\\{2\\}[0-9]\\{2\\}.*\\.pdf\\|PDF$\" | while read FN; do YY=$(echo \"$FN\" |cut -c 3-4);DD=$(echo \"$FN\" |cut -c 5-6);mkdir -p \"$TARGETDIR$YY/$DD\";mv \"$FN\" \"$TARGETDIR$YY/$DD\";done;mv * \"$ARCHIVEDIR\";"
	end try
end adding folder items to

on Setup()
	set myPDF_Dir to POSIX path of (choose folder with prompt "Välj den mapp som dina PDF-filer ska hamna i")
	if myPDF_Dir contains " " then
		display dialog "Ledsen: PDF-mappens sökväg får inte innehålla mellanslag. Välj en annan"
		my Setup()
	end if
	set myArchiveDir to POSIX path of (choose folder with prompt "Välj den mapp som resten av filerna ska hamna i")
	if myPDF_Dir contains " " then
		display dialog "Ledsen: Övrigt-mappens sökväg får inte innehålla mellanslag. Välj en annan"
		my Setup()
	end if
end Setup

Tack så mycket scriptet fungerar som en gud, vet du om det finns någon bok man kan köpa för att lära sig lite om apple script och shell script, för det känns som att det hade varit smidigt att kunna lite.

tack för alla svar.

Jadå det finns många böcker, men det man ska veta innan man sätter igång och lär sig är att det tar en himla massa tid innan man kommer upp på en skaplig nivå. Flera av oss som svarat i den här tråden håller på med olika former av programmering mer eller mindre på heltid.

Personligen anser jag att den bästa formen att lära sig snabbt är att gå en lärarledd utbildning. Till det skall man naturligtvis också ha lämpliga böcker. Om det gäller just AppleScript så tycker jag Haanan Rosenthals bok är utmärkt som introduktion.

Shell scripting är ett så fruktansvärt stort område så att jag direkt skulle vilja avråda alla som till skillnad från oss nördar tycker det är roligt att brottas med obegripliga unix-kommandon

Men, om du ändå vill göra det så kan jag t.ex. rekommendera SAMS: Teach Yourself Shell Programming in 24 Hours , av Sriranga Veeraraghavan

då kanske man ska hålla sig till automator till det man behöver.
med tanke på att jag inte är någon programerare.
men tack för tipsen.

Coolt script Richard - Lärde mig något nytt där. You'da'Man!

  • Medlem
  • International user
  • 2007-04-01 00:55

Äh jag klassar mig inte till nån programerare men AppleScript kan vem som helst lära sig. Kör hårt. Det svåra med AppleScript är att det inte finns nåt riktigt vettigt gratis sätt att lära sig utom med "trial and error" Google har varit den bästa referencen för mig. Och jag har gjort rätt kompliserade saker med AppleScript. Även om det ofta blir rätt ful kod.

Juanito,

Såvitt jag förstår så är det några år sedan du började skriva AppleScript, vilket ju bevisar min poäng - det är inte gjort på en kafferast

Å ena sidan är AppleScript ett "litet" programmeringspråk. Hela språkdefinitionen ryms på cirka 20 A4-sidor. Lägger man till Standard Additions blir det kanske ungefär lika mycket till.

Det som gör AppleScript svårt är att varje program utökar vokabulären och syntaxen i en omfattning som många gånger överstiger grunderna många gånger om.

Ta t.ex. program som InDesign, Excel, Word etc - alla är mer omfattande än AppleScript självt!

1
Bevaka tråden