Mitteilungszentrale
Liste aller Dateien in einem Verzeichnis - Teil 2
30.03.14 23:16 Kategorisiert in: Mac OS X | AppleScript
Per Email erhielt ich die Nachfrage, ob mein AppleScript zum auflisten aller Dateien in einem beliebigen Verzeichnis nicht auch Ordner mit auflisten könnte.
Das Geheimnis dahinter liegt im Schlüsselwort "file" ("Datei") am Anfang des Scripts. Ersetzt man Dieses durch "folder" ("Ordner") oder "item" ("Einträge") kann man steuern, was vom Skript abgefragt wird. Dies lässt sich natürlich auch komfortabel per Dialog steuern. Deshalb hier also nun die zweite Version des Skripts. Zunächst wird der Benutzer gefragt, welche Ordnerinhalte gelistet werden sollen. Nach Auswahl des abzufragenden Ordners wird dann noch nachgefragt, ob Datei- bzw. Ordnergrößen mit angegeben werden sollen.
Diese Version zeigt nach Abschluss zudem an, dass die gewünschten Daten in der Zwischenablage gelandet sind. Bei OS X Systemen ohne Mitteilungszentrale - also OS X 10.7 und früher - sollte diese Zeile also aus dem Skript gelöscht werden.
Voraussetzungen: Mac OS X 10.8 und später (sollte auf so ziemlich allen Versionen laufen, wenn die Zeile "display notification with title "Zwischenablage" subtitle "Die Liste der Ordnerinhalte wurden in die Zwischenablage kopiert."" aus dem Skript entfernt wird, getestet auf Mac OS X 10.9.2)
tell application "Finder"
set theFileList to {}
set withsizes to false
display dialog "Welche Ordnerinhalte sollen ausgegeben werden?" buttons {"Dateien", "Ordner", "Dateien und Ordner"}
set DlogResult to result
if button returned of result = "Dateien" then
set allFiles to (every file of (choose folder))
else if button returned of result = "Ordner" then
set allFiles to (every folder of (choose folder))
else
set allFiles to (every item of (choose folder))
end if
display dialog "Sollen die Dateigrößen mit ausgegeben werden?" buttons {"Ja", "Nein"}
set DlogResult to result
if button returned of result = "Ja" then set withsizes to true
repeat with i from 1 to count items of allFiles
set SingleFile to (item i of allFiles) as alias
if withsizes = true then
if size of (get info for SingleFile) < 1000000 then
set end of theFileList to ((name of SingleFile) & " (" & ¬
(round (size of (get info for SingleFile)) / 1000) & " KB) " & return) as string
else
set end of theFileList to ((name of SingleFile) & " (" & ¬
(round (size of (get info for SingleFile)) / 1000000) & " MB) " & return) as string
end if
else
set end of theFileList to ((name of SingleFile) & return) as string
end if
end repeat
set the clipboard to the (theFileList as string)
display notification with title "Zwischenablage" subtitle "Die Liste der Ordnerinhalte wurden in die Zwischenablage kopiert."
beep
end tell
Das Geheimnis dahinter liegt im Schlüsselwort "file" ("Datei") am Anfang des Scripts. Ersetzt man Dieses durch "folder" ("Ordner") oder "item" ("Einträge") kann man steuern, was vom Skript abgefragt wird. Dies lässt sich natürlich auch komfortabel per Dialog steuern. Deshalb hier also nun die zweite Version des Skripts. Zunächst wird der Benutzer gefragt, welche Ordnerinhalte gelistet werden sollen. Nach Auswahl des abzufragenden Ordners wird dann noch nachgefragt, ob Datei- bzw. Ordnergrößen mit angegeben werden sollen.
Diese Version zeigt nach Abschluss zudem an, dass die gewünschten Daten in der Zwischenablage gelandet sind. Bei OS X Systemen ohne Mitteilungszentrale - also OS X 10.7 und früher - sollte diese Zeile also aus dem Skript gelöscht werden.
Voraussetzungen: Mac OS X 10.8 und später (sollte auf so ziemlich allen Versionen laufen, wenn die Zeile "display notification with title "Zwischenablage" subtitle "Die Liste der Ordnerinhalte wurden in die Zwischenablage kopiert."" aus dem Skript entfernt wird, getestet auf Mac OS X 10.9.2)
tell application "Finder"
set theFileList to {}
set withsizes to false
display dialog "Welche Ordnerinhalte sollen ausgegeben werden?" buttons {"Dateien", "Ordner", "Dateien und Ordner"}
set DlogResult to result
if button returned of result = "Dateien" then
set allFiles to (every file of (choose folder))
else if button returned of result = "Ordner" then
set allFiles to (every folder of (choose folder))
else
set allFiles to (every item of (choose folder))
end if
display dialog "Sollen die Dateigrößen mit ausgegeben werden?" buttons {"Ja", "Nein"}
set DlogResult to result
if button returned of result = "Ja" then set withsizes to true
repeat with i from 1 to count items of allFiles
set SingleFile to (item i of allFiles) as alias
if withsizes = true then
if size of (get info for SingleFile) < 1000000 then
set end of theFileList to ((name of SingleFile) & " (" & ¬
(round (size of (get info for SingleFile)) / 1000) & " KB) " & return) as string
else
set end of theFileList to ((name of SingleFile) & " (" & ¬
(round (size of (get info for SingleFile)) / 1000000) & " MB) " & return) as string
end if
else
set end of theFileList to ((name of SingleFile) & return) as string
end if
end repeat
set the clipboard to the (theFileList as string)
display notification with title "Zwischenablage" subtitle "Die Liste der Ordnerinhalte wurden in die Zwischenablage kopiert."
beep
end tell