我正在寫一個shell腳本,它將rsync文件從遠程機器,一些linux,一些macs,到一箇中央備份服務器。 Mac的根級別上有文件夾,其中包含需要備份的所有文件/文件夾的別名。我可以使用什麼終端命令來解析別名指向的文件/文件夾的路徑? (我需要這些路徑傳遞到rsync的)OS X終端命令解析別名的路徑
6
A
回答
3
我發現下面的腳本,做什麼,我需要:
#!/bin/sh
if [ $# -eq 0 ]; then
echo ""
echo "Usage: $0 alias"
echo " where alias is an alias file."
echo " Returns the file path to the original file referenced by a"
echo " Mac OS X GUI alias. Use it to execute commands on the"
echo " referenced file. For example, if aliasd is an alias of"
echo " a directory, entering"
echo ' % cd `apath aliasd`'
echo " at the command line prompt would change the working directory"
echo " to the original directory."
echo ""
fi
if [ -f "$1" -a ! -L "$1" ]; then
# Redirect stderr to dev null to suppress OSA environment errors
exec 6>&2 # Link file descriptor 6 with stderr so we can restore stderr later
exec 2>/dev/null # stderr replaced by /dev/null
path=$(osascript << EOF
tell application "Finder"
set theItem to (POSIX file "${1}") as alias
if the kind of theItem is "alias" then
get the posix path of ((original item of theItem) as text)
end if
end tell
EOF
)
exec 2>&6 6>&- # Restore stderr and close file descriptor #6.
echo "$path"
fi
3
我發現this tool。
一小部分編譯代碼,.bash_profile
中的一個函數,以及瞧。透明處理別名,只需使用「cd」即可。也比使用Applescript快幾倍。
7
我有這個問題,所以我實現了一個命令行工具。它的開放源代碼位於https://github.com/rptb1/aliasPath
關鍵的是,即使別名被破壞,它仍然可以工作,這與我找到的任何AppleScript解決方案不同。因此,您可以使用它編寫腳本來在大量文件更改音量時修復別名。這就是我寫這個的原因。
源代碼很短,但是這裏是關鍵部分的總結,對於任何需要在代碼中解決這個問題的人,或者想查找相關協議的人。
NSString *aliasPath = [NSString stringWithUTF8String:posixPathToAlias];
NSURL *aliasURL = [NSURL fileURLWithPath:aliasPath];
NSError *error;
NSData *bookmarkData = [NSURL bookmarkDataWithContentsOfURL:aliasURL error:&error];
NSDictionary *values = [NSURL resourceValuesForKeys:@[NSURLPathKey]
fromBookmarkData:bookmarkData];
NSString *path = [values objectForKey:NSURLPathKey];
const char *s = [path UTF8String];
相關問題
- 1. OS X的終端命令
- 2. 在OS X中的Python終端命令
- 3. 添加路徑到終端OS X
- 4. OS X終端歷史丟失命令
- 5. 命令(Linux終端)的路徑設置
- 6. 在命令行終端中解析json
- 7. OS X終端命令創建一個在當前日期命名的文件
- 8. Mac OS X終端出現錯誤的SSH路徑?
- 9. Antlr3解析器路徑命令外殼
- 10. 在OS X終端中使用命令的信息/結果
- 11. 如何在Mac OS X上反轉終端中的cd命令?
- 12. 通過Mac OS X終端中的別名輸入目錄
- 13. 如何在Mac OS X終端中設置「npm innit」的別名?
- 14. Mac OS X的終端批量重命名
- 15. 如何讓UNIX'cp'命令識別OS X別名?
- 16. 在Mac OS X終端中使用命令作爲ctrl
- 17. 在Mac OS X命令行終端下使用sed
- 18. Mac OS X在按下箭頭之後,終端命令卡住
- 19. SVN在OS X上使用bash /終端解析多個文件
- 20. 如何在終端中創建Mac OS X「別名」類文件?
- 21. 我可以在Mac OS X終端中更改命令名稱嗎?
- 22. OS X終端顏色
- 23. 在url.pathname解析路徑名()
- 24. 終端命令
- 25. 使用多個啓動路徑來運行終端命令swfit
- 26. 從終端或命令行運行時獲取路徑
- 27. 瞭解bashrc別名命令
- 28. 終端命令無法識別?
- 29. 如何解析jQuery終端中的命令參數?
- 30. 指定Xcode 8.3.x命令行.ipa的路徑/名稱?
只要能夠在腳本運行時訪問原始項目,這就好了。如果別名損壞或無法裝入卷,則不起作用。我已經添加鏈接到一個工具,可以在這些情況下工作在另一個答案http://stackoverflow.com/a/17570232/425078 – rptb1 2013-07-10 12:07:29
爲什麼所有複製和恢復現有的fd 2?爲什麼不說`path = $(osascript 2>/dev/null << EOF ...)` – dubiousjim 2015-08-31 18:39:31