How to turn an AppleScript path into a posix path and pass to shell script?

孤街醉人 提交于 2019-12-12 03:44:00

问题


I´m trying to create a textfile that my ffmpeg-command can use to merge two videofiles. The problem I´m having is getting my folder/file-paths to look like I want. The two lines that cause my problems are:

set theFile to path to replay_folder & "ls.txt"

I simply want this path to be the path of replay_folder and ls.txt

In the shell script line I want the same thing.

do shell script "cd " & replay_folder & " /usr/local/bin/ffmpeg -f concat -i ls.txt -c copy merged.mov"

I get this path with the shell script Macintosh HD:Users:BjornFroberg:Documents:wirecast:Replay-2017-03-17-12_11-1489749062:

But I want this /Users/BjornFroberg/Documents/wirecast/Replay-2017-03-17-12_11-1489749062/

The full code is:

tell application "Finder"
set sorted_list to sort folders of folder ("Macintosh HD:Users:bjornfroberg:documents:wirecast:") by creation date
set replay_folder to item -1 of sorted_list
set replay_files to sort items of replay_folder by creation date
end tell

set nr4 to "file '" & name of item -4 of replay_files & "'"
set nr3 to "file '" & name of item -3 of replay_files & "'"

set theText to nr4 & return & nr3

set overwriteExistingContent to true

set theFile to path to replay_folder & "ls.txt" --actual path is: POSIX file "/Users/BjornFroberg/Documents/wirecast/Replay-2017-03-17-12_11-1489749062/ls.txt"

set theOpenedFile to open for access file theFile with write permission

if overwriteExistingContent is true then set eof of theOpenedFile to 0

write theText to theOpenedFile starting at eof

close access theOpenedFile

do shell script "cd " & replay_folder & "
/usr/local/bin/ffmpeg -f concat -i ls.txt -c copy merged.mov"

Any help is appreciated :)


回答1:


path to is part of Standard Scripting Additions and works only with predefined folders. It does not work with custom paths. For example "Macintosh HD:Users:bjornfroberg:documents:" can be replaced with the relative path

set documentsFolder to path to documents folder as text

which points always to the documents folder of the current user.


replay_folder is a Finder object specifier which can - in this particular form – only be handled be the Finder. To create an (colon separated) HFS path you need to coerce the Finder specifier to text

set theFile to (replay_folder as text) & "ls.txt" 

However to pass the replay_folder to the shell you have to use a POSIX path (slash separated). Since a Finder specifier cannot be coerced directly to POSIX path you need also first create a HFS path. Additionally you have to take care that space characters are escaped in the path. Any unescaped space character will break the shell script

set replay_folderPOSIX to POSIX path of (replay_folder as text)
do shell script "cd " & quoted form of replay_folderPOSIX & "
/usr/local/bin/ffmpeg -f concat -i ls.txt -c copy merged.mov"



回答2:


You can convert an AppleScript path to a Posix path like this:

set applescriptPath to "Macintosh HD:Users:bjornfroberg:documents:wirecast:"

set posixPath to (the POSIX path of applescriptPath)

log posixPath

Returns /Users/bjornfroberg/documents/wirecast/

Note: Your post's title and your actual question are kind of different topics. Your goal is to turn an AppleScript path (Macintosh HD:Users:bjornfroberg:documents:wirecast) into a posix path (/Users/bjornfroberg/documents/wirecast/), to which you want to append a file name; you can use the code above in conjunction with your existing code to build the full path:

set theFile to POSIX path of (replay_folder as text) & "ls.txt"

Depending what you're trying to do, once you have defined your path, you may need to convert it to a posix file to manipulate it via AppleScript. For example, if you want to open it via AppleScript:

set pFile to POSIX file theFile

tell application "Finder" to open pFile

(See POSIX path in applescript from list not opening. Raw path works)



来源:https://stackoverflow.com/questions/42868682/how-to-turn-an-applescript-path-into-a-posix-path-and-pass-to-shell-script

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!