automatischer Export

Hallo Gemeinde,

ich habe in meiner DTPO einen Teilbereich der auch von anderen Benutzern benötigt wird. Diesen möchte ich regelmässig exportieren. Im Prinzip macht die Funktion unter Ablage->Exportieren->Dateien und Ordner genau das was ich brauche.

Gibt es jedoch eine Script, damit ich das automatisch machen kann?

ciao
mr_drlove

Würde ich auch gerne wissen.

Eventuell wäre es sinnvoller, die benötigten Dokumente nicht zu importieren, sondern zu indizieren (s. Menü Ablage). Dann wäre der regelmäßige Export vermutlich nicht nötig.

Das verlinken hat aber etliche Nachteile:

  1. das sortieren in Ordner ( in DT Gruppen) wird nicht auf der Festplatte nachgezogen.
  2. das sortieren von Ordnern und Dateien auf der Festplatte wird nach erneutem Indizieren nicht korrekt angelegt: es gibt Dubletten usw…

Ja, das sehe ich auch. Die Indizierung macht auch Sinn, wenn der Export für den Notfall erzeugt wird.
Somit also zurück zu meiner Frage, gibt es nun einen Ansatz für ein Script.
Ich habe selbst schon versucht, schaffe auch das Öffnen der DB, scheitere aber an der Selektion der Records.

Bitte um Unterstützung.

Vielen Dank.

ciao
mr_drlove

Wie sieht denn das Skript bisher aus und welche Dokumente/Gruppen sollen exportiert werden?

Hallo,

also ich habe das existierende Backup-Skript genommen und etwas angepasst.

set myVolume to "/Volumes/xxx"
set mountedVolumes to every paragraph of (do shell script "mount | awk -F' on ' '{print $2}' | awk -F' \\\\(' '{print $1}'")

tell application id "DNtp"
	try
		set td_databse to open database "/Users/xxx/Documents/DEVONthink/test_db.dtBase2"
		-- set this_database to get database with uuid "test_db"
		-- display dialog "my variable: " & this_database
		
		set this_database to current database
		
		
		set this_date to do shell script "date +%y:%m:%d"
		
		set this_path to path of this_database
		set {od, AppleScript's text item delimiters} to {AppleScript's text item delimiters, "/"}
		set this_name to the last text item of this_path
		set AppleScript's text item delimiters to ""
		if this_name ends with ".dtBase2" then set this_name to (characters 1 thru -9 of this_name) as string
		set this_archive to "/Volumes/xxx/Daten/dtpo_backup/" & this_name & " " & this_date & ".dtBase2.zip"
		set AppleScript's text item delimiters to od
		
		show progress indicator "Daily Backup Archive" steps 3
		
		if myVolume is in mountedVolumes then
			with timeout of 600 seconds
				step progress indicator "Verifying..."
				if (verify database this_database) is not 0 then error "Database is damaged."
				
				step progress indicator "Optimizing..."
				if not (optimize database this_database) then error "Optimization of database failed."
				
				step progress indicator "Zipping..."
				if not (compress database this_database to this_archive) then error "Backup failed."
			end timeout
			
			hide progress indicator
			-- on error error_message number error_number
			-- hide progress indicator
			-- if the error_number is not -128 then display alert "DEVONthink Pro" message error_message as warning
		else
			-- do nothing
		end if
	end try
end tell

Lass ich nun den Code vom normalen Backup laufen, funktioniert das soweit.
Dann habe ich mir die Funktionen von DTOP angesehen, bin mir aber nicht sicher, ob ich die richtige für den Export gefunden habe. Ich vermute dies ist die folgende:

export v : Export a record (and its children).
export
record record : The record to export.
to text : The destination directory as a POSIX path. DEVONthink creates the destination if necessary.
→ text

Stimmt das? Ist das die richtige Funktion?

Falls ja, muss ich jetzt noch einen Record selektieren. Ist ein Record auch einen Gruppe?

Falls ja, habe ich eine Gruppe unter dieser sind alle meine weiteren Gruppen und Dokumente.
Nun weiß ich aber nicht wie ich diese Gruppe selektiere?

Diese Prinzip mit den Records, scheine ich auch nicht ganz zu verstanden haben.

Danke.
ciao
mr_drlove

Ja.

Ja, alle Elemente in der Datenbank sind Records.

Da gibt es verschiedene Möglichkeiten, z.B. “get record with ID”, “get record with UUID” und “get record at”. Letzteres ist vermutlich am sinnvollsten, d.h. wenn die Gruppe B in der Gruppe A gewünscht wird, würde der Befehl so aussehen:


set this_group to get record at "/A/B" in this_Database

Hallo,

sorry, für die späte Antwort, aber ich bin einfach nicht dazu gekommen.
Ich bin das Skript noch schuldig. Hier nun meine Lösung, kann man sicherlich verbessern, aber es tut.

Bin auf Verbesserungsvorschläge gespannt.
Wer cool wenn ihr das Script für alle zur Verfügung stellt.

ciao
mr_drlove


set myVolume to "/Volumes/xxx"
set mountedVolumes to every paragraph of (do shell script "mount | awk -F' on ' '{print $2}' | awk -F' \\\\(' '{print $1}'")

tell application id "DNtp"
	try
		set td_databse to open database "/Users/xxx/Documents/DEVONthink/test_db.dtBase2"
		set this_database to current database
		set this_path to path of this_database
		set {od, AppleScript's text item delimiters} to {AppleScript's text item delimiters, "/"}
		set this_name to the last text item of this_path
		set AppleScript's text item delimiters to ""
		if this_name ends with ".dtBase2" then set this_name to (characters 1 thru -9 of this_name) as string
		set this_archive to "/Volumes/xxx/Daten/dtpo_backup/test_grp"
		set AppleScript's text item delimiters to od
		set this_group to get record at "/test_grp" in this_database
		if myVolume is in mountedVolumes then
			with timeout of 600 seconds
				if not (export record this_group to this_archive) then error "Export failed."
			end timeout
		else
			-- do nothing
		end if
	end try
end tell

Gibt es eine Möglichkeit zu prüfen, ob der Export beendet ist?

ciao
mr_drlove

Wenn Sie die Zeile…


end try

…durch folgenden Code ersetzen…


on error msg
display dialog msg
end try

…dann wird im Falle eines Fehlers eine Warnung angezeigt.

Hallo Herr Grunenberg,

nein, so wollte ich es nicht. Ich möchte nach dem Export gerne ein TimeMachine Backup anstossen. Das macht aber erst Sinn, wenn der Export fertig ist. Nachdem der nun doch einige Zeit dauert, wäre eine Art Event schön, mit dem ich prüfen kann, ob der Export fertig ist.
Ihren Vorschlag interpretiere ich so, dass ich im Fehlerfall eine Fehlermeldung angezeigt bekomme.
Haben Sie noch eine Idee?

Danke.
ciao
mr_drlove

Sie könnten vor…


end timeout

…noch die Zeile…


display dialog "Exported!"

…einfügen.

Nein ich suche etwas in der Art, Beispiel frei mit Psydo-Code (sorry, komme eher aus dem Shell-Scripting).


## start  export database
if (export database is finished) then
   start backup
fi

Danke.
ciao

Time Machine unterstützt leider kein AppleScript.

Ich habe mittlerweile einen gefunden um das Backup zu starten, dies ist möglich mit:

do shell script “tmutil startbackup”

ciao
mr_drlove

Hallo,

vielen Dank für das tolle script zum Export von Ordnern und Dateien. Für mich ist der Export mit Ordnern und Dateien neben dem DB-Backup ein zusätzlicher separater Backupvorgang, um (z.B. im Notfall) ein Restore unabhängig vom Betriebssystem und einer DT Installation durchführen zu können.

Ich wundere mich, warum es dafür kein “Bordscript” gibt.

Da ich jeweils das gesamte Archiv exportieren möchte, stellt sich die Frage, ob dies einfacher geht als alle einzelenen Gruppenordner in dem script benennen zu müssen?

Hier mein aktuelles script:

set myVolume to "/Volumes/DATABASE"
set mountedVolumes to every paragraph of (do shell script "mount | awk -F' on ' '{print $2}' | awk -F' \\\\(' '{print $1}'")
set shortDateString to short date string of (current date)
tell application id "DNtp"
	try
		set td_database to open database "/Volumes/test.dtBase2"
		set this_database to current database
		set this_path to path of this_database
		set {od, AppleScript's text item delimiters} to {AppleScript's text item delimiters, "/"}
		set this_name to the last text item of this_path
		set AppleScript's text item delimiters to ""
		if this_name ends with ".dtBase2" then set this_name to (characters 1 thru -9 of this_name) as string
		set AV to "/Users/Desktop/test/" & shortDateString
		set AppleScript's text item delimiters to od
		set GP1 to get record at "/GP" in this_database
		set GP2 to get record at "/GP" in this_database
		set GP3 to get record at "/GP" in this_database
		set GP4 to get record at "/GP" in this_database
		set GP5 to get record at "/GP" in this_database
		set GP6 to get record at "/GP" in this_database
		set GP7 to get record at "/GP" in this_database
		set GP8 to get record at "/GP" in this_database
		set GP9 to get record at "/GP" in this_database
		set GP10 to get record at "/GP" in this_database
		set GP11 to get record at "//GP" in this_database
		if myVolume is in mountedVolumes then
			with timeout of 600 seconds
				if not {((export record GP1 to AV) & (export record GP2 to AV) & (export record GP3 to AV) & (export record GP4 to AV) & (export record GP5 to AV) & (export record GP6 to AV) & (export record GP7 to AV) & (export record GP8 to AV) & (export record GP9 to AV) & (export record GP10 to AV) & (export record GP11 to AV))} then error "Export failed."
			end timeout
		else
			-- do nothing
		end if
	end try
end tell

Kann mir jemand weiterhelfen? Das script habe ich mir bereits für mehrere Gruppenordner angepasst - es funktioniert prima - der Ansatz ist aber sicher “verbesserungswürdig” da einrichtungs- und pflegeintensiv.

VG
Thorsten

Guten Tag, ich würde dieses Thema gerne noch einmal aufgreifen. Leider habe ich nicht viel Erfahrung mit Skripten und finde es Schade, dass DT einen automatischen Export nicht als Bordmittel mit sich bringt.

Ich habe nun umgestellt auf DT3 Pro und bin eigentlich ganz zufrieden. Bei der Indexierung kam es bei mir allerdings öfter zu Datenverlusten. Mein Setup ist ein iMac, der eigentlich die Hauptarbeit macht und ein MacBook für unterwegs. Ich hatte Ordner auf meiner Diskstation indexiert. Wenn ich Dateien aber mit dem MacBook bearbeitet habe, dass waren aus dem Ordner plötzlich Dateien weg.

Naja, zum Glück bin ich ja ein Sicherungsfreund und konnte sie aus meiner Cloud Sicherung wiederherstellen.

Nun habe ich alle Dateien in DT importiert und in der DB liegen. Einen Sync mache ich per WebDav über meinen Server zu Hause. Das funktioniert alles sehr gut.

Allerdings würde ich nun gerne auf meinem iMac einen automatischen Export hinterlegen wollen, der alle Daten aus meinen DT Datenbanken exportiert und in einen Ordner auf der Diskstation legt. Wenn das nicht geht, dann auch gerne auf den iMac selbst und ich nutze Hazel zum verschieben.

Wie muss ich nun vorgehen? Könnt ihr mir bitte helfen?

Was für Dateien wurden denn konkret mit welchem Programm bearbeitet? Wurde der Name oder Ort geändert? Und hilft ein Aufruf von Ablage > Indizierte Objekte aktualisieren, d.h. werden dann die Dateien wieder hinzugefügt?

Nein, die Dateien waren komplett aus dem indexierten Ordner gelöscht. Ich hatte z. B. zu meinem aktuellen Projekt einen Ordner, den ich indexiert habe. Die Indexierung fand auf dem iMac statt. Danach wurden die Dateien über den DT Sync mit der WebDav-Datenbank abgeglichen. Die Dateien hatte ich somit auch auf dem MacBook. Soweit so gut.
Wenn ich dann aber z. B. eine Excel-Datei bearbeitet habe und diese abgespeichert, waren andere Dateien aus dem Ordner einfach weg. Also nicht die bearbeitete Datei selbst, sondern andere Dateien aus dem Ordner im Dateisystem.