Connect failed: Connection timed out

[GastForen Programmierung/Entwicklung AppleScript

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste

Dateien kopieren

Hans Haesler
  
Beiträge gesamt: 5826

26. Mai 2020, 22:54
Bewertung:

gelesen: 27793

Beitrag als Lesezeichen
Hallo Thilo,

eine neue Version mit ein paar Änderungen:

1. Anstelle von "26.05.2020" wird der Name eines Ordners so zusammengesetzt: "2020_05_26".
Das "Umdrehen" ist notwendig, weil der zu entfernende Ordner nicht durch den Namen, welcher dem Datum "vor 30 Tagen" entspricht, bezeichnet wird.
Wegen folgender Überlegung: Wenn mit der bisherigen Lösung an einem Tag kein Backup erzeugt wird, dann würde am nächsten Tag der zweitälteste Ordner entfernt werden.
Die Punkte sind durch Underscores ersetzt, weil sonst der letzte Zahlenwert als Suffix behandelt wird.

2. Das 30 Tage zurückliegende Datum wird nicht mehr errechnet. Aus demselben Grund: Wenn ein Backup ausfiel, würde ein falscher Ordner entfernt werden.
Nun ist der zu entfernende Ordner ganz einfach der erste im Backup-Ordner, sobald dieser mehr als 30 Ordner enthält.

3. Wenn das Script diesen ersten Ordner direkt entfernen würde, könnte es sein, dass es nicht der erste ist. Was soll das?!? Mit "Mojave" wurde die verlangte Liste der Ordner nicht mehr in alphabetischer Ordnung zurückgegeben. Ob es mit "Catalina" immer noch so ist, kann ich nicht prüfen. Werden wir nachholen.
Zuerst wird der Finder gebeten, die Namen der Ordner aufzulisten. Sicherheitshalber wird diese Liste an einen Handler geschickt, welcher sie sortiert zurückgibt. Dann ist das erste Element der Liste der Name des zu löschenden Ordners.

4. Analog Deinem Wunsch in unserem privaten Austausch werden die Ordner "Dokumente" und "Musik" kopiert. Deshalb werden deren Pfade in eine Liste gesetzt.

Das nachfolgende Script habe ich im Format "Programm" gesichert und es unten angehängt. Somit muss es nicht ab "Script Editor" gestartet werden. Es genügt ein Doppelklick auf das Icon des Scripts.

Code
(* 
BackupScript_03.scpt
© 26.05.2020 / Hans Haesler, Châtelard 52, CH-1018 Lausanne
*)

# das aktuelle Datum
set curDate to current date
set dd to day of curDate
set mm to text -2 thru -1 of ("0" & (month of curDate as number))
set yyyy to year of curDate
set actString to "" & yyyy & "_" & mm & "_" & dd

# die Liste der zu kopierenden Ordner
set folderList to {"Macintosh HD:Users:tbo:Documents", "Macintosh HD:Users:tbo:Music"}

# der Pfad zum Backup-Ordner
set backupFolder to "Sich_3:Backup"

# den aktuellen Ordner erzeugen
tell application "Finder"
try
set targetFolder to (make new folder at folder backupFolder with properties {name:actString}) as string
on error
set targetFolder to (backupFolder & actString) as string
end try
end tell

# die Ordner kopieren
tell application "Finder" to duplicate folderList to folder targetFolder with replacing

# die Namer der Ordner auflisten, welche sich in "Backup" befinden ...
tell application "Finder"
set backList to name of every folder of folder backupFolder
end tell
# ... und zählen
set nItems to count backList

# wenn mehr als 30 Ordner
if nItems is greater than 30 then
# die Liste zum Sortier-Handler schicken
set namesList to quickSort(backList, 1, nItems)
# den ersten Ordner in "Backup" entfernen
try
tell application "Finder" to delete folder (item 1 of namesList) of folder backupFolder
end try
end if

# den Anwender informieren
activate me
display dialog "Fertig." buttons "OK" default button 1 with icon 1

#######################################################
# der Handler, welcher die Namen sortiert
on quickSort(a, L, R)
script
property namesList : a
end script
tell result
set ctr to L
set n to R
set aRef to item L of its namesList
repeat while ctr < n
repeat while (aRef < item n of its namesList) and (ctr < n)
set n to n - 1
end repeat
if n is not ctr then
set item ctr of its namesList to item n of its namesList
set ctr to ctr + 1
end if
repeat while (aRef > item ctr of its namesList) and (ctr < n)
set ctr to ctr + 1
end repeat
if n is not ctr then
set item n of its namesList to item ctr of its namesList
set n to n - 1
end if
end repeat
set item n of its namesList to aRef
if L < n then
quickSort(its namesList, L, n - 1)
end if
if R > ctr then
quickSort(its namesList, ctr + 1, R)
return its namesList
end if
end tell
end quickSort

Gruss, Hans

(Dieser Beitrag wurde von Hans Haesler am 27. Mai 2020, 11:56 geändert)

Anhang:
BackupScript_03.zip (8.06 KB)
Änderungsverlauf:
Beitrag geändert von Hans Haesler (Veteran) am 27. Mai 2020, 11:56