Cập nhật: Giải pháp dưới đâyAppleScript: Làm thế nào để kiểm tra xem một cái gì đó là một thư mục hoặc một tập tin
Giả sử bạn có một danh sách các mục đã chọn từ Finder. Giả sử có một số tệp, thư mục, các gói khác nhau và thậm chí một số ứng dụng được bao gồm trong lựa chọn.
Bây giờ, bạn chỉ muốn những mục đó (theo thuật ngữ UNIX) thư mục. I E. bạn chỉ muốn các mục bạn có thể cd
vào trong thiết bị đầu cuối.
Bạn có thể kiểm tra tài sản kind
mỗi mục và xem nếu nó bằng "Thư mục", nhưng điều đó không làm việc cho bó ứng dụng hoặc gói khác/gói, mặc dù họ đang có trong thực tế "thư mục" (thư mục)
Nếu các mục là đối tượng tệp thực sự (không phải bí danh), bạn có thể kiểm tra thuộc tính class
của mỗi mục ... ngoại trừ việc đó không phải lúc nào cũng hoạt động, vì các gói hiện là trường hợp "tệp tài liệu" và ứng dụng là các tệp "tệp ứng dụng".
Tệ hơn nếu bạn chỉ có danh sách bí danh thay vì đối tượng tệp thực, vì bạn không thể kiểm tra thuộc tính class
; nó sẽ luôn chỉ nói "bí danh". Các giải pháp duy nhất tôi có thể nghĩ đến, là để có được đường dẫn POSIX của mỗi mục và xem liệu nó có dấu gạch chéo ở phía trước hay không hoặc gửi đường dẫn đến tập lệnh được viết bằng ngôn ngữ khác, có thể kiểm tra nếu một cái gì đó là một thư mục hay không.
Cả hai ý tưởng đều có vẻ điên rồ đối với tôi. Việc kiểm tra dấu gạch chéo ở phía trước là vô cùng khó khăn và mong manh, và cho tất cả mọi thứ vào một kịch bản lệnh khác là hoàn thành quá mức cần thiết.
Cập nhật: gì ASMUS gợi ý dưới đây dường như là
chỉ
một giải pháp tốt
, vì nó dường như không có cách nào cho AppleScript để con nó ra ngày của riêng mình
:
do shell script "file -b " & filePosixPath
Điều đó sẽ trả về chuỗi "thư mục" cho thư mục, gói, ứng dụng, gói, v.v.
Nhưng lưu ý (!) Cho đĩa, nó trả về "thư mục dính".
Dưới đây là một hàm tổng quát rằng hoạt động khá tốt
on isDirectory(someItem) -- someItem is a file reference
set filePosixPath to quoted form of (POSIX path of (someItem as alias))
set fileType to (do shell script "file -b " & filePosixPath)
if fileType ends with "directory" then return true
return false
end isDirectory
Vâng, tôi muốn nói là giải pháp đơn giản nhất là để đưa các đường dẫn POSIX qua công cụ dòng lệnh 'tệp', ví dụ: 'file -b/Applications/Safari.app' chỉ trả về" thư mục ". Cần phải dễ dàng kết hợp nó trong một vòng lặp 'do shell script'. – Asmus
@Asmus: Có lẽ bạn đang đúng. Sau khi tôi viết câu hỏi, tôi nhận ra rằng tôi chỉ có thể làm một lệnh shell nhanh hơn là một kịch bản lệnh shell đầy đủ. Tuy nhiên, nó có vẻ lạ khi phải đi ra ngoài AppleScript để tìm ra một cái gì đó cơ bản như có hay không một cái gì đó là một thư mục. Tôi sẽ để lại câu hỏi trong một ngày hoặc lâu hơn, và trong khi chờ đợi, bạn có thể tự do viết bình luận cho bạn để có được điểm :) – Flambino
@Flambino Tôi không thể đưa ra câu hỏi hay vì tôi đã sử dụng hết bình chọn lên! :( – fireshadow52