Dialog
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
Liste aller Dateien in einem Verzeichnis
22.01.12 10:00 Kategorisiert in: Mac OS X | AppleScript
Auf den ersten Blick ist es eigentlich nur ein ganz kleines Problem: Man benötigt die Namen aller Dateien eines Verzeichnisses als Text-Liste. Aber wie erstellt man sich mal schnell eine solche Liste? AppleScript leistet auch hier gute Dienste! Mit Hilfe eines kleinen Skripts listet man alle Dateinamen (Ordner werden nicht mit ausgegeben) innerhalb eines Verzeichnisses auf.
Dieses Script fragt zunächst nach dem Ordner, der aufgelistet werden soll. Danach wird noch gefragt ob das Ergebnis auch die Dateigrößen enthalten soll, oder nicht. Das Ergebnis landet dann in der Zwischenablage. Da das Skript bei größeren Verzeichnissen schon mal etwas länger benötigt, wird am Ende der System-Ton ausgegeben. Dies signalisiert das Ende der Operation. (Dank an Martin Wolter für die Hilfestellung!)
Voraussetzungen: Mac OS X 10.x (sollte auf so ziemlich allen Versionen laufen, getestet auf Mac OS X 10.7.2)
tell application "Finder"
set allFiles to (every file of (choose folder))
set theFileList to {}
set withsizes to false
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)
beep
end tell
Dieses Script fragt zunächst nach dem Ordner, der aufgelistet werden soll. Danach wird noch gefragt ob das Ergebnis auch die Dateigrößen enthalten soll, oder nicht. Das Ergebnis landet dann in der Zwischenablage. Da das Skript bei größeren Verzeichnissen schon mal etwas länger benötigt, wird am Ende der System-Ton ausgegeben. Dies signalisiert das Ende der Operation. (Dank an Martin Wolter für die Hilfestellung!)
Voraussetzungen: Mac OS X 10.x (sollte auf so ziemlich allen Versionen laufen, getestet auf Mac OS X 10.7.2)
tell application "Finder"
set allFiles to (every file of (choose folder))
set theFileList to {}
set withsizes to false
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)
beep
end tell