디렉토리가 Mac OS X 터미널의 번들 또는 패키지인지 확인하십시오.
문제
'.app'과 같은 디렉토리가 명령 줄에서 Finder의 관점에서 패키지 또는 번들로 간주되는지 여부를 결정할 수 있습니다. 나는 이것이 작은 쉘 프로그램으로하기가 어렵다고 생각하지 않지만, 필요하지 않다면 바퀴를 다시 발명하지 않을 것입니다.
해결책
업데이트:
스포트라이트가있는 모든 시스템에서 사용 mdls
KmditemContentTypetree 속성을보고있는 번들을 감지 할 수 있습니다. 예 :
mdls -name kMDItemContentTypeTree "/Applications/Safari.app"
나에게 다음과 같은 출력을 생성합니다
kMDItemContentTypeTree = (
"com.apple.application-bundle",
"com.apple.application",
"public.executable",
"com.apple.localizable-name-bundle",
"com.apple.bundle",
"public.directory",
"public.item",
"com.apple.package"
)
당신이 볼 때마다 com.apple.package
거기에서 Finder가 패키지로 표시해야합니다. 물론 이름에 "번들"이있는 모든 것은 이미 모든 패키지가 번들이 아니라는 것을 의미합니다 (번들은 잘 정의 된 디렉토리 구조를 갖는 패키지의 특정 부분 집합입니다).
오래된 답변 :
이 명령 (Leopard 이전의 OS X)을 사용하여 등록 된 모든 파일 유형 확장 목록을 얻을 수 있습니다.
/System/Library/Frameworks/ApplicationServices.framework/Frameworks\
/LaunchServices.framework/Support/lsregister -dump
또는 표범과 나중에 :
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks\
/LaunchServices.framework/Versions/A/Support/lsregister -dump
모든 파일 확장에는 플래그가 있습니다. 패키지 플래그가 설정되면 패키지입니다.
예를 들어
claim id: 806354944
name: Bundle
role: none
flags: apple-internal relative-icon-path package
icon: Contents/Resources/KEXT.icns
bindings: .bundle
--------------------------------------------------------
claim id: 1276116992
name: Plug-in
role: none
flags: apple-internal relative-icon-path package
icon: Contents/Resources/KEXT.icns
bindings: .plugin
이것을 번들이없는 파일과 비교하십시오
claim id: 2484731904
name: TEXT
role: viewer
flags: apple-internal
icon:
bindings: .txt, .text, 'TEXT'
모든 번들을 실제로 얻는 유일한 방법은 Launchservice 데이터베이스 (위에서 덤프 한 것)를 찾는 것입니다. 만약 당신이 단지 plist인지 아닌지 또는 번들 비트가 설정되어 있는지 여부에 따라 가면 일부 또는 많은 다발을 잡을 수 있지만 모든 것을 잡을 수는 없습니다. 이것은 데이터베이스 파인더가 결정하는 데 사용하는 것입니다
- 이 디렉토리는 번들입니까?
- 알려진 파일 확장자입니까?
- 이 파일 유형의 경우 "Open with with"아래에 어떤 응용 프로그램이 나열되어야합니까?
- 이 파일 유형을 표시하는 데 어떤 아이콘을 사용해야합니까?
그리고 더 많은 것들.
편집 : Hagelin 덕분에 Leopard의 경로가 추가되었습니다.
다른 팁
이것은 조금 늦었지만 : MDLS 명령을 사용하여 번들을 감지 할 수있는 것 같습니다. 구체적으로, (멀티 라인) 출력 :
mdls -name kMDItemContentTypeTree /Path/To/Directory
문자열이 포함됩니다
"com.apple.package"
디렉토리가 패키지 인 경우 어딘가에 어딘가에있는 (적어도 사자에 따라 인용 표시 포함). 패키지가 번들 인 경우 출력에도 포함됩니다.
"com.apple.bundle"
그리고 마지막으로, 특히 응용 프로그램 번들 인 경우 출력에도 포함됩니다.
"com.apple.application-bundle"
(이것은 매우 제한된 테스트에 따르면, 균일 한 유형 식별자에 대한 Apple의 문서와 MDL의 Man Page에서 이것은 사실이어야합니다. 그리고 테스트 한 항목의 경우, 이것은 외부로 제공되지 않은 번들에 대해서도 마찬가지입니다. UTIS의 목적을 감안할 때 예상되는 것입니다.)
'./contents/info.plist "의 존재에 따라 일부 번들을 식별 할 수 있지만 모든 번들 유형 (예 : 문서 및 레거시 번들)에는 필요하지 않습니다. Finder는 파일 확장자를 기반으로 디렉토리를 번들로 식별합니다. (.app, .bundle 등) 또는 번들 비트가 설정된 경우.
명령 줄 사용에서 번들 비트를 확인하려면 다음과 같습니다.
getFileInfo -aB directory_name
모든 사례를 잡으려면 다음을 확인합니다.
- 번들 비트가 설정되어 있습니까?
- 그렇지 않은 경우,이를 번들로 식별하는 파일 확장자가 있습니까? (보다 메키의 대답)
- 그렇지 않다면 아마도 번들이 아닐 것입니다.
<plug>
나의 시작하다 도구에는이 기능이 있습니다. 예를 들어:
% launch -f Guards.oo3
Guards.oo3: non-application package
type: '' creator: ''
kind: OmniOutliner 3
content type ID: com.omnigroup.omnioutliner.oo3-package
contents: 1 item
created: 3/6/09 3:36:50 PM
modified: 3/6/09 4:06:13 PM
accessed: 4/12/09 1:10:36 PM [only updated by Mac OS X]
backed up: 12/31/03 6:00:00 PM
% launch -f /Applications/Safari.app
/Applications/Safari.app: scriptable Mac OS X application package
type: 'APPL' creator: 'sfri'
architecture: PowerPC 7400, Intel 80x86
bundle ID: com.apple.Safari
version: 4 Public Beta
kind: Application
content type ID: com.apple.application-bundle
contents: 1 item
created: 8/21/07 5:11:33 PM
modified: 2/24/09 7:29:51 PM
accessed: 4/12/09 1:10:51 PM [only updated by Mac OS X]
backed up: 12/31/03 6:00:00 PM
첫 번째 출력 라인이 '패키지'로 끝나는 지 확인하여 원하는 것을 얻을 수 있어야합니다.
launch
Fink와 MacPorts에도 있습니다.
</plug>
사과 스크립트 사용자로서 시스템 이벤트를 사용하여 수행 할 수 있기 때문에 명령 줄에서 쉽게 수행 할 수있는 방법이 있어야합니다. 따라서 다른 모든 것이 실패하면 다음과 같이 명령 줄에서 필요한 사과 스크립트를 실행할 수 있습니다.
$ FILE=/Users/myuser/Desktop/foo.rtfd
$ osascript -e "tell application \"System Events\" to get package folder of alias POSIX file \"${FILE}\""
결과입니다
true
번들에는 항상`./contents/info.plist '파일이 있어야합니다. 디렉토리 에서이 존재를 확인할 수 있습니다. 그렇다면 패키지/번들입니다.