"choose file with multiple selections allowed" für ein shell script ?

MrPalmers

MrPalmers

Aktives Mitglied
Thread Starter
Dabei seit
09.11.2010
Beiträge
276
Reaktionspunkte
24
Also ich möchte mehrere Files die mit "split -b" vom Terminal gesplittet wurden durch ein Apple script wieder herstellen (um es ein wenig benutzerfreundlicher zu machen).

Code:
set these_items to choose file with prompt "Choose a document:" with multiple selections allowed

repeat with dateipfad in these_items
			do shell script "cd /Users/Admin/Desktop
	cat " & (quoted form of POSIX path of dateipfad) & " > beispiel.mov"
		end repeat
So, das Sollte ja eigentlich Problemlos Funktionieren, tut es aber natürlich nicht :mad:

Das Problem ist, dass immer nur das letzte File in in das shell script einfügt wird.

Hat jemand ne Idee wie das kommt / wie man das geradebiegen kann?
 
Meines wissens funktioniert der Befehl 'cat' so:
Code:
cat file1 file2 file3 >file4

Du mußt also alle Files der Liste, die Du mit choose file erhalten hast zu einem String kombinieren und diesen an das ShellScript weitergeben, z.B:
PHP:
set myFiles to choose file with multiple selections allowed
set catStart to "cat "
set catEnd to " >beispiel.mov"
set catMiddle to ""
repeat with dateiPfad in myFiles
	set catMiddle to (catMiddle & (quoted form of POSIX path of dateiPfad) & " ")
end repeat
set catMiddle to (characters 1 thru -2 of catMiddle) as text -- Leerzeichen am Ende des Strings löschen
set catCommand to catStart & catMiddle & catEnd

-- display dialog catCommand
-- do shell script catCommand
Sollte funktionieren.

Ciao
Farid
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: MrPalmers
Genial!
Danke man! Das war genau das, was ich brauchte!! Ich habe so lange überlegt und gesucht und gesucht :D UNd jetzt endlich :banana:
Danke nochmal, echt Top!

Edit: Wenn ich schon einen Neuen Thread aufgemacht habe, weiß vielleicht noch einer eine Antwort auf meine nächste Frage:
Wie kann ich jetzt den Namen der ausgewählten Dateien als Namen für das File welches zusammengefügt wird, nehmen.
Also ich wähle meinetwegen die Files
~/Desktop/OrdnerA/beispiel.movaa
~/Desktop/OrdnerA/beispiel.movab
~/Desktop/OrdnerA/beispiel.movac
etc....
Ist es möglich catEnd (wie chebfarid das ja so nett benannt hat ;) ) als ~/Desktop/OrdnerA/beispiel.movaa zu setzen?
(Und das ohne einfach einen neuen Dialog zu machen, bei dem ich den Namen für catEnd eingebe)
 
Zuletzt bearbeitet:
Wenn ich Dich recht verstehe, ist der Name des Ergebnisfiles also bereits in den Namen der einzelnen Elementen vorhanden, von denen dann nur noch die Suffix "aa" oder "ab" gekappt werden müßte?

Wenn diese Struktur immer gleich ist, geht das:
PHP:
set catEnd to ">" & characters 1 thru -3 of (name of (get info for (item 1 of myFiles))) as text

Das komplette Scriptbeispiel:
PHP:
set myFiles to choose file with multiple selections allowed
set catStart to "cat "
set catEnd to ">" & characters 1 thru -3 of (name of (get info for (item 1 of myFiles))) as text
set catMiddle to ""
repeat with dateiPfad in myFiles
	set catMiddle to (catMiddle & (quoted form of POSIX path of dateiPfad) & " ")
end repeat

set catCommand to catStart & catMiddle & catEnd

-- display dialog catCommand
-- do shell script catCommand

Good scripting
Farid
 
  • Gefällt mir
Reaktionen: MrPalmers
Super, wieder genau das, was ich brauchte :D

Gab nur bei mir hin und wieder einen Fehler bei Datein die ein Leerzeichen im Namen hatten (Beispiel Film.mov), habe deswegen ein "escaptes" Gänsefüßchen vor und hinter catEnd gesetzt. Jetzt gibt es auch keine Probleme mehr!
Code:
set catEnd to "> \"" & (characters 1 thru -3 of (name of (get info for (item 1 of myFiles))) as text) & "\""

Dank deiner (chebfarid) Hilfe habe ich jetzt auch mein Programm/Script zum "Dateien Spalten" fertig bekommen :banana:

Code:
repeat
	display dialog "Welcome to the FileSplitter
Choose an action:" buttons {"cancle", "join", "split"} default button 3
	if the button returned of the result is "split" then
		

set dateipfad to choose file with prompt "Choose a file to split:"
		
		set size_x to ""
		set Dialog_2 to display dialog "Set the File Size (in MB) for the parts that will be created" buttons {"OK"} default button 1 default answer ""
		set the size_x to the text returned of Dialog_2
		
		set split1 to "cd ~/Desktop/FileSplitter
split -b " & size_x & "m "
		set split2 to (quoted form of POSIX path of dateipfad) & " "
		set split3 to " \"" & (name of (get info for dateipfad) as text) & "\""
		
		try
			tell application "Finder"
				make new folder with properties {name:"FileSplitter"}
			end tell
		end try
		
		set splitcommand to split1 & split2 & split3
		do shell script splitcommand
		
		display dialog "The job is done" buttons {"End", "Continue"} default button 2
		if the button returned of the result is "End" then
			tell application "Finder" to do shell script "open ~/Desktop/FileSplitter"
			exit repeat
		end if
		
	else if the button returned of the result is "join" then
		set myFiles to choose file with multiple selections allowed
		
		set catStart to "cd ~/Desktop/
cat "
		set catEnd to "> \"" & (characters 1 thru -3 of (name of (get info for (item 1 of myFiles))) as text) & "\""
		set catMiddle to ""
		
		repeat with dateipfad in myFiles
			set catMiddle to (catMiddle & (quoted form of POSIX path of dateipfad) & " ")
		end repeat
		set catMiddle to (characters 1 thru -2 of catMiddle) as text
		set catCommand to catStart & catMiddle & catEnd
		do shell script catCommand
		
		display dialog "The job is done" buttons {"End", "Continue"} default button 2
		if the button returned of the result is "End" then
			exit repeat
		end if
		
	else
		exit repeat
	end if
end repeat

Bestimmt nicht gerade besonders gut gescripted, aber es erfüllt deinitiev seien Zweck!

Man kann damit einfach Dateien Splitten und wieder zusammenfügen.
Einsatzbereich:
-Dateien >4GB aber Festplatten/USB-Sticks mit FAT32
-Dateien größer als das Speichermedium
-Versand von größeren Dateien über E-Mail
etc.
 
Zurück
Oben Unten