Mac OSX는 명령 행에서 파일 당 파일 연결을 변경합니다.


10

명령 줄을 통해 특정 파일과 관련된 응용 프로그램을 일괄 변경해야합니다. 특정 파일 확장명에 대한 파일 연결을 변경하지 말고 실제로 해당 파일 형식의 기본 연결과 다른 응용 프로그램에서 열 특정 파일을 대상으로하려고합니다. 대상 파일에 대해서만이 파일 확장자의 기본 응용 프로그램을 변경하고 싶지 않습니다.

지금은 파인더에서 변경하려는 모든 파일을 선택하고 option + command + i를 눌러 여러 파일에 대한 정보를 가져오고 해당 파일의 응용 프로그램을 변경합니다. 짜증나 네요.

답변:


6

이 정보는 파일의 리소스 포크 ( Wikipedia )에 저장됩니다. 이 리소스 포크는 확장 된 속성 ( Wikipedia ) 으로 노출됩니다 .

$ ls -l@ somefile.txt 
-rw-r--r--  1 danielbeck  staff  0 18 Mär 19:00 somefile.txt

# setting non-default application using Finder

$ ls -l@ somefile.txt 
-rw-r--r--@ 1 danielbeck  staff  0 18 Mär 19:01 somefile.txt
        com.apple.ResourceFork  1338 

처음부터 편집하는 것은 아마도 상당히 고통 스럽습니다. 많은 이진 데이터 :

$ xattr -p com.apple.ResourceFork somefile.txt 
00 00 01 00 00 00 05 08 00 00 04 08 00 00 00 32
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 04 04 00 00 00 32 2F 55 73 65 72 73 2F 64
61 6E 69 65 6C 62 65 63 6B 2F 41 70 70 6C 69 63
61 74 69 6F 6E 73 2F 53 75 62 6C 69 6D 65 20 54
65 78 74 20 32 2E 61 70 70 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 01 00 00 00 05 08
00 00 04 08 00 00 00 32 0C 00 00 00 C0 05 00 00
00 1C 00 32 00 00 75 73 72 6F 00 00 00 0A 00 00
FF FF 00 00 00 00 19 00 00 00

그러나 이러한 리소스 포크를 파일처럼 취급 할 수 있습니다. 예를 들면 다음과 같습니다.

$ open somefile.txt # opens in Sublime 2
$ cp somefile.txt/..namedfork/rsrc openInSublime2rsrc
$ open otherfile.txt # opens in TextEdit
$ cp openInSublime2rsrc otherfile.txt/..namedfork/rsrc
$ open otherfile.txt # opens in Sublime 2

/..namedfork/rsrc 리소스 포크가 POSIX 응용 프로그램 (예 : 터미널에서 수행하는 모든 작업)에 노출되는 방식입니다.

따라서 기존 리소스 포크 (예 :)에서 하나의 "템플릿"파일을 생성 openInSublime2rsrc하면 나중에 다른 파일로 복사 할 수 있습니다.


1
이 솔루션은 Lion까지 작동했습니다. file / rsrc로 ​​복사하면 ": Not a directory"오류가 발생합니다. 광장으로 돌아 가기 :(
Rob

1
@Rob somefile.txt/..namedfork/rsrc대신 사용해보십시오 . somefile.txt/rsrc얼마 전에 사용되지 않습니다.
다니엘 벡

Daniel Beck-당신은 생명의 은인입니다. 정말 감사합니다.
Rob

리소스 포크를 직접 편집 할 필요는 없습니다 (아래 답변 참조). 요약하면 Rez 및 DeRez라는 유틸리티를 사용하여 리소스 포크를 편집 할 수 있습니다. 이러한 도구는 지원되는 개발자 도구이므로 문제가 거의 없습니다.
mauvedeity

5

위의 Daniel Beck의 답변에서 얻은이 정보는 실제로 파일의 리소스 포크에 저장됩니다. Apple은 "Rez"및 "DeRez"라는 두 가지 유틸리티를 개발자 도구와 함께 제공하므로 리소스 포크를 조작 할 수 있습니다. 특히 Rez를 사용하여 리소스 포크를 파일로 푸시 할 수 있습니다.

명령 줄에서 단일 파일의 연결을 변경하려면 먼저 올바른 유형의 파일을 만들고 열려는 응용 프로그램과의 연결을 수동으로 변경하십시오. 이렇게하면 파일에 리소스 포크가 생성됩니다. 이렇게하지 않으면 복사 할 정보가 없습니다. 그런 다음 DeRez로 리소스 포크를 빼냅니다 (예 : foo.txt 파일을 가정하고 사용하려는 응용 프로그램이 Firefox.app라고 가정).

DeRez foo.txt > foo.r

그러면 텍스트 파일로 디 컴파일 된 리소스 포크 인 foo.r이라는 파일이 생성됩니다. 다음과 같이 보일 것입니다 :

data 'usro' (0) {
    $"0000 001A 2F41 7070 6C69 6361 7469 6F6E"            /* ..../Application */
    $"732F 4669 7265 666F 782E 6170 7000 0000"            /* s/Firefox.app... */
    $"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */

처음부터 새로 만들려면이 형식을 편집 할 수 있지만 형식이 정확하게 맞아야 합니다. 그렇지 않으면 작동하지 않습니다. 원하는 앱 번들의 경로를 설명하는 16 진수로 인코딩 된 문자이며 0으로 끝납니다.

리소스 포크가 비어 있고 초기화되지 않았다는 메시지가 표시 될 수 있습니다. 그렇다면 소스 파일에서 파일 별 연결을 변경하지 않았으므로 그렇게 한 다음 DeRez 명령을 다시 실행해야합니다.

이 파일이 있으면 다음과 같이이를 다른 파일로 푸시 할 수 있습니다 (bar.txt가 있다고 가정).

Rez foo.r -a -o bar.txt

foo.r의 리소스 포크로 bar.txt를 업데이트합니다.

Rez 또는 DeRez 인쇄 오류 메시지가 없으므로 제대로 작동하는지 확인하려면 다음과 같이하십시오.

DeRez bar.txt

이전과 동일한 정보가 표시되어야합니다. 그런 다음 평소와 같이 bar.txt 파일을 열면 기본 응용 프로그램이 아닌 올바른 응용 프로그램에서 열립니다.

배치 변경을 수행하려면 .r 파일이 있으면 다음과 같이 표준 와일드 카드 확장을 사용할 수 있습니다.

Rez foo.r -a -o *.txt

와일드 카드와 일치하는 모든 파일을 수행합니다.

10.7 에서이 작업을 수행했지만 이전 컴퓨터에서도 작동한다는 것을 이해합니다.


이 도구에 대한 흥미로운 정보. 그럼에도 불구하고 이러한 도구는 액세스 ..namedfork/rsrc가 수행하지 않는 기능을 수행하지 않는 것 같습니다 . 특정 도구에 대한 지식을 얻기 위해 (반) 내부에 대한 지식을 요구하는 거래 – 이것이 더 낫다고 확신하지는 않습니다.
Daniel Beck

@DanielBeck 내가 아는 한 정확합니다. 그러나 업 스레드에서 말했듯이 내부 정보는 Lion과 함께 변경되었지만 버전에 관계없이 안정적인 개발 도구입니다. 개인적으로 내부 요소는 흥미롭지 만 도구는 크로스 플랫폼에서 작동 할 가능성이 높으며 지원되는 도구를 사용하고 싶습니다.
모빌리티

3

xattr 을 사용하여 수행했습니다 (APFS 볼륨에서 완벽하게 작동합니다)

xattr -wx com.apple.LaunchServices.OpenWith \
"`xattr -px com.apple.LaunchServices.OpenWith FILEWITHGOODTYPE`" FILETOCHANGE

이것 좀 봐 더 필요한 주제를


1

주어진 유형의 특정 파일 세트와 관련된 응용 프로그램을 "일괄 변경"하고 싶다고 말합니다. 해당 파일 형식의 모든 인스턴스를 새 응용 프로그램으로 변경하고 싶지 않기 때문에 하위 집합.

그러나이를 수행하는 쉬운 방법은 없습니다. LaunchServices가 파일을 열도록 지시 할 응용 프로그램을 찾는 방법은 다단계 프로세스이며 다양한 범위 (사용자, 시스템 등)의 설정에 따라 다릅니다.

그러나- open커맨드 라인에서 사용하고 이번에는 특정 앱을 사용하도록 지시 할 수 있습니다 . 이것은 연결을 변경하지는 않지만 원하는 말, 즉 특정 응용 프로그램에서 파일 세트를 엽니 다.

open -a <appbundle> <somefile> <anotherfile>

처럼

shiny:t fl$ ls -l
total 1848
-rwxr-xr-x  1 fl  staff    1795 Mar 18 20:03 distribution.pl
-rw-r--r--  1 fl  staff  939264 Mar 18 20:03 objectreport.txt
shiny:t fl$ open -a TextWrangler distribution.pl objectreport.txt

그리고 커맨드 라인에서 완전히 멀어지면 다음 유틸리티를 살펴보십시오 : http://michelf.com/software/magic-launch/


구체적인 예에서는 open -a TextWrangler *훨씬 빠릅니다.
Daniel Beck

그렇습니다. 그러나 설명에 쉘 와일드 카드 확장 계층을 추가하여 예제를 이해하기 어렵게 만들었습니다
Florenz Kley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.