ObiTobi
Aktives Mitglied
Thread Starter
- Dabei seit
- 05.11.2009
- Beiträge
- 1.536
- Reaktionspunkte
- 91
Hallo,
wie schon in anderem Thread angekündigt, hier mein kleines Skript welches Bilder von der CF-Karte auf externe Platte (oder Netzlaufwerk <- ist leider noch nicht implementiert) kopiert. Dabei
- direkt einen Backup in ein erzeugtes Sparsebundle macht
- die Dateinamen in Kleinbuchstaben beim Kopieren umbenennt
- die Dateien in eine automatisch erzeugte Verzeichnisstruktur kopiert
wie schon in anderem Thread angekündigt, hier mein kleines Skript welches Bilder von der CF-Karte auf externe Platte (oder Netzlaufwerk <- ist leider noch nicht implementiert) kopiert. Dabei
- direkt einen Backup in ein erzeugtes Sparsebundle macht
- die Dateinamen in Kleinbuchstaben beim Kopieren umbenennt
- die Dateien in eine automatisch erzeugte Verzeichnisstruktur kopiert
PHP:
-- Kopiert RAW und JPEG Dateien vom Datenträger (CF-Karte) auf Externe Platte oder Netzlaufwerk wenn vorhanden.
set bodyNames to {"EOS5DMKIII", "EOS7D", "EOSM"}
set bodyName to ""
set cardName to ""
set cardNames to {"EOS5D-001", "EOS5D-002", "EOS7D-001", "EOS7D-002", "EOSM-001", "EOSM-002"}
set driveName to ""
set drivenames to ""
set sourceDir to ""
set sourceDrive to ""
set backupDir to ""
set backupImageDir to ""
set backupDrive to ""
set destinationDir to ""
set destinationDrives to {"ExtHDD 2503", "ExtHDD 2504", "ExtHDD 2505", "ExtHDD 2506", "ExtHDD 2507"}
set destinationDrive to ""
set nextFile to ""
set fileName to ""
set fileList to ""
set fileDate to ""
set imageDate to do shell script "date +\"%d-%m-%Y\""
set aktuellesJahr to year of (current date)
set osName to ""
set logFile to ""
set logFileName to ""
set logEintrag to ""
set userName to system attribute "USER"
tell application "Finder"
set osName to do shell script "sw_vers -productVersion"
end tell
if osName is not "10.8.5" then
display dialog "Programm wird beendet"
end if
-- SourceDrive finden
tell application "Finder" to set drivenames to name of every disk
repeat with driveName in driveNames
if driveName is in cardNames then
set sourceDrive to driveName
end if
end repeat
-- Body finden
tell application "Finder"
if (exists disk (item 1 of cardNames)) or (exists disk (item 2 of cardNames)) then
set bodyName to item 1 of bodyNames
set sourceDir to alias "Volumes:" & sourceDrive & ":dcim:100eos5d:" as string
else if (exists disk (item 3 of cardNames)) or (exists disk (item 4 of cardNames)) then
set bodyName to item 2 of bodyNames
set sourceDir to alias "Volumes:" & sourceDrive & ":dcim:100eos7d:" as string
else if (exists disk (item 5 of cardNames)) or (exists disk (item 6 of cardNames)) then
set bodyName to item 3 of bodyNames
set sourceDir to alias "Volumes:" & sourceDrive & ":dcim:100eosm:" as string
else
error number -128
end if
end tell
-- DestinationDrive und Backup finden und festlegen
tell application "Finder"
if exists disk "Fotografie-2" then
set destinationDrive to "Fotografie-2"
else if (exists disk (item 1 of destinationDrives)) or (exists disk (item 2 of destinationDrives)) or (exists disk (item 3 of destinationDrives)) or (exists disk (item 4 of destinationDrives)) or (exists disk (item 5 of destinationDrives)) then
if aktuellesJahr ≤ "2014" then
set destinationDrive to item 1 of destinationDrives
else if aktuellesJahr ≤ "2016" then
set destinationDrive to item 2 of destinationDrives
else if aktuellesJahr ≤ "2018" then
set destinationDrive to item 3 of destinationDrives
else if aktuellesJahr ≤ "2020" then
set destinationDrive to item 4 of destinationDrives
else if aktuellesJahr ≤ "2022" then
set destinationDrive to item 5 of destinationDrives
end if
else
error number -128
end if
set backupImageDir to "~/Pictures/"
do shell script "hdiutil create " & "-fs HFS+ " & backupImageDir & sourceDrive & "-`date +\"%d-%m-%Y\"`.sparsebundle -volname " & sourceDrive & "-`date +\"%d-%m-%Y\"`"
do shell script "hdiutil attach " & backupImageDir & sourceDrive & "-`date +\"%d-%m-%Y\"`.sparsebundle"
set backupDrive to sourceDrive & "-" & imageDate
set backupDir to backupDrive
end tell
-- Datum finden
tell application "Finder" to set fileList to every file of folder sourceDir
repeat with fileName in fileList
set fileDate to modification date of fileName
set fileDateTag to text -2 thru -1 of ("0" & fileDate's day)
set fileDateMonat to text -2 thru -1 of ("0" & ((month of fileDate) * 1))
set fileDateJahr to ((year of fileDate) as text)
WrtiteLogFile("fileName ist " & fileName & " Tag ist " & fileDateTag & " Monat ist " & fileDateMonat & " Jahr ist " & fileDateJahr)
tell application "System Events"
if not (exists folder (destinationDrive & ":" & userName & ":Fotografie:DSLR:" & bodyName & ":RAW:" & fileDateJahr)) then
tell application "Finder"
make new folder with properties {name:fileDateJahr} at folder "RAW" of folder bodyName of folder "DSLR" of folder "Fotografie" of folder userName of disk destinationDrive
end tell
end if
if not (exists folder (destinationDrive & ":" & userName & ":Fotografie:DSLR:" & bodyName & ":RAW:" & fileDateJahr & ":" & fileDateMonat)) then
tell application "Finder"
make new folder with properties {name:fileDateMonat} at folder fileDateJahr of folder "RAW" of folder bodyName of folder "DSLR" of folder "Fotografie" of folder userName of disk destinationDrive
end tell
end if
if not (exists folder (destinationDrive & ":" & userName & ":Fotografie:DSLR:" & bodyName & ":RAW:" & fileDateJahr & ":" & fileDateMonat & ":" & fileDateTag)) then
tell application "Finder"
make new folder with properties {name:fileDateTag} at folder fileDateMonat of folder fileDateJahr of folder "RAW" of folder bodyName of folder "DSLR" of folder "Fotografie" of folder userName of disk destinationDrive
end tell
end if
end tell
set destinationDir to alias "Volumes:" & destinationDrive & ":" & userName & ":Fotografie:DSLR:" & bodyName & ":RAW:" & fileDateJahr & ":" & fileDateMonat & ":" & fileDateTag as string
tell application "Finder"
set fileName to do shell script "echo " & fileName & " | awk -F: '{print $4}'"
set fileName to do shell script "echo " & fileName & " | tr '[:upper:]' '[:lower:]'"
set name of (duplicate sourceDir & fileName to backupDir as alias) to fileName
set name of (duplicate sourceDir & fileName to destinationDir as alias) to fileName
do shell script "chmod 644 " & quoted form of POSIX path of (destinationDir & ":" & fileName)
delete file (sourceDir & fileName) as alias
end tell
end repeat
-- Backup Image abhändgen
if backupImageDir is equal to "~/Pictures/" then
do shell script "hdiutil unmount /Volumes/" & backupDrive
end if
-- CF karte abhängen
do shell script "hdiutil unmount /Volumes/" & sourceDrive
WrtiteLogFile("sourceDrive ist " & sourceDrive)
WrtiteLogFile("sourceDir ist " & sourceDir)
WrtiteLogFile("bodyName ist " & bodyName)
WrtiteLogFile("destinationDrive ist " & destinationDrive)
WrtiteLogFile("destinationDir ist " & destinationDir)
WrtiteLogFile("backupDrive ist " & backupDrive)
WrtiteLogFile("backupDir ist " & backupDir)
WrtiteLogFile("backupImageDir ist " & backupImageDir)
-- LogFile Erzeugen und schreiben
on WrtiteLogFile(txt)
set logFileName to "DigiCam.log"
set logPath to ((path to home folder as string) & "Library:Logs")
set logFile to open for access file (logPath & ":" & logFileName) with write permission
try
set logEintrag to short date string of (current date) & " - " & time string of (current date) & " " & (txt as text) & return
write logEintrag & return to logFile starting at eof
close access logFile
return logEintrag
on error
close access logFile
return "Error writing to logFile "
end try
end WrtiteLogFile