• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Der Frühling ist auch in den eingesandten Fotos deutlich zu erkennen. Zeigt uns, wer Euer Favorit ist! hier geht es lang für Euer Voting --> Klick

Problem beim auslesen von Ordnern

albreax

Golden Delicious
Registriert
12.11.08
Beiträge
6
Hallo,
ich hab ein kleines Problem. Mit folgendem Script will ich den Download Order und den Desktop des Users auslesen. Leider bekomme ich folgende Fehlermeldung.
error "„every file of alias \"Macintosh HD:Users:username: Downloads:\"“ kann nicht gelesen werden." number -1728 from every file of alias "Macintosh HD:Users:username: Downloads:"
Hat jemand eine Idee was die Lösung ist? Danke im Voraus!

Code:
set _downloadDir to path to downloads folder from user domain
set _desktopDir to path to desktop folder from user domain

findInDir(_downloadDir)
findInDir(_desktopDir)

on findInDir(dir)
	set files_list to files of dir
	repeat with f in files_list
		f as string
	end repeat
end findInDir
 

sedna

Schweizer Glockenapfel
Registriert
22.10.08
Beiträge
1.375
Hallo!

Eventuell so:
tell application "Finder" to set files_list to files of dir


Gruß
 
Zuletzt bearbeitet:

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
Alternativ
tell application "System Events" to set files_list to aliases of dir

Warum set files_list to aliases of dir und nicht set files_list to files of dir kannst du hier nachlesen (Such nach"Aliases and Files"). files funktioneirt aber schlussendlich auch.



Dein loop wird so auch nicht funktionieren.

So funktioniert's:
Code:
on findInDir(dir)
	tell application "System Events"
		set files_list to aliases of dir
		repeat with f in files_list
			path of f as string
		end repeat
	end tell
end findInDir

oder mit dem Finder:
Code:
on findInDir(dir)
	tell application "Finder"
		set files_list to files of folder dir
		repeat with f in files_list
			set fP to ((container of f as alias) & (name of f)) as string
		end repeat
	end tell
end findInDir

So würde dein loop funktionieren:
Code:
on findInDir(dir)
	set files_list to every paragraph of (do shell script "find " & quoted form of (POSIX path of dir) & " -type f | sed 's/\\/\\//\\//g'")
	repeat with f in files_list
		POSIX file f as string
	end repeat
end findInDir


Ich hoffe die Unterschiede aufzuzeigen hilft ein bisschen. Probier's einfach mal aus.
 

sedna

Schweizer Glockenapfel
Registriert
22.10.08
Beiträge
1.375
Hallo fyysh!

Erstmal hast du natürlich recht, dass man --eigentlich-- "files" gar nicht nehmen sollte. Ich wollte nur zeigen, wie es geht, wenn man es denn nimmt.
Ich hatte auch kurz überlegt, da auszuholen, ob da nicht eh "items" statt "files" stehen sollte. Das Wort "auslesen" selber hatte mich aber irritiert. Was soll denn mit welchen Dateien (oder Ordnern) passieren?
Eventuell reicht ja hier schon ein
set files_list to list folder dir without invisibles

Jedenfalls hat es einen Vorteil, wenn man den Finder und nicht System Events bemüht (Zumindest spart man sich Schreibarbeit): Der Finder listet nur die Objekte auf, die man auch im Finder sieht
;)

Unterordner würden ja in beiden Fällen allerdings nicht ausgelesen werden.
Na ja. Dein Skript (ohne es getestet zu haben) liest dafür aber "gründlich" alles aus und ist wohl etwas über das Ziel hinaus geschossen.
Wer sich nicht schon mal ein Skript zum Auslesen gebastelt hat, dem empfehle ich in diesem Fall immer den Automator. Da gibt es das schon fertig als Aktion.
Wenn es interessiert, so poste ich gerne ein Skript (Gerüst), wie ich das eventuell machen würde

Gruß
 

fyysh

Schweizer Glockenapfel
Registriert
25.01.10
Beiträge
1.386
Hi sedna,

Erstmal hast du natürlich recht, dass man --eigentlich-- "files" gar nicht nehmen sollte. Ich wollte nur zeigen, wie es geht, wenn man es denn nimmt.
Hey, entspann dich, meine Absicht war es nicht, dich zu belehren. War als allgemeiner Hinweis gemeint. :)

An die invisibles hatte ich gar nicht gedacht, zugegebenermaßen, mir ging's alleine um das bekommen von Pfaden. Du kannst aber auch die invisibles mit den System Events auslassen, nämlich so:
tell application "System Events" to set files_list to aliases of dir whose visible is true
Es gibt viele Wege und es kann vorkommen, dass die System Events bequemer als der Finder sind. Muss jeder selber wissen - dazu muss man aber wissen, dass es mit beiden geht. :)

Unterordner würden ja in beiden Fällen allerdings nicht ausgelesen werden.
Von Unterordnern hat ja auch keiner gesprochen. :)

Dein Skript (ohne es getestet zu haben) liest dafür aber "gründlich" alles aus und ist wohl etwas über das Ziel hinaus geschossen.
Kommt ja drauf an, was das Ziel war. Meins war nur die Files eines Ordners listen ohne zusätzlichem Schnickschnack, also ausschließlich zeigen, wie das Skript vom TE funktionieren könnte. Im letzten Fall nur zeigen, das man das auch machen kann, theoretisch, ohne Finder oder System Events zu bemühen und dass dann so der vom TE gepostete Loop funktionieren würde. Letztes listet übrigens auch alle Files in Unterordnern, weil ich dem kein depth mitgegeben habe... ich habe da einfach keinen Wert drauf gelegt.

Worauf das hinauslaufen soll, hat er ja selber nicht geschrieben... Eine Antwort ist selten genauer als die Frage, auf die sie folgt. ;)


Ach, wir verstehen uns... :)
 

sedna

Schweizer Glockenapfel
Registriert
22.10.08
Beiträge
1.375
Danke für die ausführliche Antwort.
Übrigens bin ich total entspannt :) Ist doch nur ein Forum.
Und belehren lass ich mich gerne! Allerdings gilt ja erst mal die Faustformel: Die Sedna hat immer recht :p

Gruß