Tôi đang viết tập lệnh shell sẽ rsync các tệp từ máy từ xa, một số linux, một số máy mac, đến máy chủ sao lưu trung tâm. Các máy Mac có các thư mục ở cấp cơ sở chứa bí danh của tất cả các tệp/thư mục cần được sao lưu. Một lệnh terminal mà tôi có thể sử dụng để giải quyết đường dẫn đến các tệp/thư mục mà các bí danh trỏ tới là gì? (Tôi sẽ cần phải vượt qua những con đường để rsync)Lệnh thiết bị đầu cuối OS X để xử lý đường dẫn của một bí danh
Trả lời
Tôi thấy kịch bản sau đây mà làm những gì tôi cần:
#!/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
tôi đã tìm thấy this tool.
Một chút mã được biên dịch, một hàm trong số .bash_profile
và voila của bạn. Xử lý các bí danh trong suốt, chỉ cần sử dụng "cd". Nhanh hơn vài lần so với sử dụng Applescript.
Phần hữu ích của liên kết của bạn (công cụ này): 'getTrueName.c' không còn khả dụng ở đó nữa. –
@danielAzuelos cảm ơn vì đã cho tôi biết! Tôi đã tweet tại tác giả, liên kết đã được sửa. – Groxx
Tôi gặp vấn đề này và vì vậy tôi đã triển khai một công cụ dòng lệnh. Mã nguồn mở tại https://github.com/rptb1/aliasPath
Điều quan trọng là nó sẽ hoạt động ngay cả khi bí danh bị hỏng, không giống như bất kỳ giải pháp AppleScript nào mà tôi đã tìm thấy. Do đó, bạn có thể sử dụng nó để viết kịch bản để sửa các bí danh khi nhiều tệp thay đổi âm lượng. Đó là lý do tại sao tôi đã viết nó.
Mã nguồn rất ngắn, nhưng đây là bản tóm tắt phần quan trọng, cho bất kỳ ai khác cần giải quyết vấn đề này trong mã, hoặc ai muốn tra cứu các giao thức liên quan.
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. cách tạo Tệp Loại "Bí danh" Mac OS X trong thiết bị đầu cuối?
- 2. Nhập vào thư mục qua bí danh trong thiết bị đầu cuối Mac OS X
- 3. Sử dụng lệnh dưới dạng ctrl trong một thiết bị đầu cuối Mac OS X
- 4. linux - viết lệnh từ một thiết bị đầu cuối đến một thiết bị đầu cuối khác
- 5. Mac OS X/Thiết bị đầu cuối mở với các cửa sổ được chỉ định
- 6. Làm cách nào để đảo ngược lệnh cd trong Thiết bị đầu cuối trên Mac OS X?
- 7. Cách tìm ra nơi bí danh (theo nghĩa bash) được định nghĩa khi chạy Thiết bị đầu cuối trong Mac OS X
- 8. Tại sao bảng màu 256 thay đổi trong thiết bị đầu cuối VIM trên OS X?
- 9. Thiết bị đầu cuối Mac OS X: Tùy chọn bản đồ + xóa thành "từ xóa lùi"
- 10. Thiết bị đầu cuối Mac OS X killall sẽ không giết quá trình chạy
- 11. Thiết bị đầu cuối Bash Chuyển hướng đến một Thiết bị đầu cuối khác
- 12. Lệnh cuối cùng trong cùng thiết bị đầu cuối
- 13. lệnh thiết bị đầu cuối để nhập tệp mysql
- 14. Bí danh tập tin xử lý để STDOUT trong perl
- 15. Các liên kết tượng trưng và bí danh có giống nhau trên OS X không?
- 16. Làm thế nào để tôi bắt đầu một lệnh từ thiết bị đầu cuối để thiết bị đầu cuối không phải là cha mẹ?
- 17. xóa đầu ra của thiết bị đầu cuối trên linux
- 18. xử lý đầu ra liên tục của lệnh trong python
- 19. Đường dẫn cơ sở dữ liệu tùy chỉnh mySQL của Mac OS X (MAMP PRO)
- 20. Cách xử lý ~ trong đường dẫn tệp
- 21. AudioObjectGetPropertyData để lấy danh sách thiết bị đầu vào
- 22. Lệnh thiết bị đầu cuối để tìm các dòng có chứa một từ cụ thể?
- 23. Mở thiết bị đầu cuối tại đây trong trình tìm kiếm Mac OS
- 24. RPG dựa trên thiết bị đầu cuối
- 25. Chạy xcodebuild từ một thiết bị đầu cuối phân chia
- 26. Gnuplot - Sử dụng replot với thiết bị đầu cuối png
- 27. cách đổi kích thước màn hình android vật lý từ thiết bị đầu cuối/vỏ
- 28. Lấy kích thước thiết bị đầu cuối trong Go
- 29. Tìm các thiết bị USB có sẵn Mac OS X
- 30. Tạo thiết bị webcam ảo cho OS X
Điều này là miễn là mục gốc có thể được truy cập tại thời điểm tập lệnh được chạy. Nó không hoạt động nếu bí danh bị hỏng hoặc khối lượng không thể được gắn kết. Tôi đã thêm liên kết vào một công cụ có thể hoạt động trong các trường hợp đó trong câu trả lời khác http://stackoverflow.com/a/17570232/425078 – rptb1
tại sao tất cả sao chép và khôi phục fd 2 hiện có? tại sao không chỉ nói 'path = $ (osascript 2>/dev/null << EOF ...)' – dubiousjim
@dubiousjim sẽ sạch hơn. Tôi không viết kịch bản này; Tôi tìm thấy nó trực tuyến. Điều đó đang được nói, tôi sẽ kiểm tra đề xuất của bạn và cập nhật câu trả lời – Josh