2012-11-23 1 views
4

OSX "xattr"유틸리티를 사용하여 한 파일에서 다른 파일로 확장 속성을 복사하려고합니다. 배경은 우리가 백업 도구를 만들고 파일/구조가 모든 속성, ACL 등을 유지해야한다는 것입니다. 리소스 포크와 같은 큰 속성을 제외한 모든 것이 잘 작동합니다. 작은 속성은 아래의 방법을 사용하여 잘 작동합니다. OS X 10.7.5에서이 작업 수행하기 여기 내가하고있는 일이 있습니다 :Copy Mac com.apple.ResourceFork 확장 된 속성으로 인해 "인수 목록이 너무 길다"

먼저 "ls -l @"을 사용하여 파일의 속성을 확인했습니다. 결과 아래 : 지금 다른에있는 파일의 사본이 속성을 적용 할

xattr -px com.apple.ResourceFork File > attribfile 

: 이제

[email protected] 1 testuser staff  0 3 Jan 2011 File 
     com.apple.FinderInfo   32 
     com.apple.ResourceFork 237246 

내가 속성을 내보내기 (com.apple.ResourceFork는 문제를 일으키는 하나입니다)

-bash: /usr/bin/xattr: Argument list too long 
,369 :

xattr -wx com.apple.ResourceFork "`cat attribfile`" File 

이 결과 : 맥이 명령을 사용하여

나는 왜 그것이 일어나고 있는지 알고 있다고 생각한다 ... 리소스 포크 데이터는 너무 길어서 인수에 맞지 않는다. 나는 깨기 시작하는 한계점을 세우지 않았지만 그것이 ARG_MAX와 관련이 있다고 생각합니다. xargs는 몇 가지 더 작은 인수가 아니기 때문에 여기서는 도움이되지 않지만 하나는 매우 큰 인수입니다.

그래서 여러 질문 :

  1. 이 큰 값을 받아 들일에서 xattr 만들 수있는 방법이 있습니까? 어떻게 든 그것을 표준 입력을 통해 파이프합니까? 맨 페이지에는 표시되지 않지만 전문가는 아니며이를 수행 할 수있는 창의적인 방법이있을 수 있습니다.
  2. 주식 명령 행 도구를 사용하여 확장 된 큰 속성을 적용하는 적절한 방법은 아무도 알 수 있습니까?
  3. 재고 명령 줄 도구가 없다면 타사 도구에 대한 권장 사항이 있습니까?
+0

이것은 다소 복잡해 질 수 있지만,'xattr'을 리버스 엔지니어링하고 입력 파일로 속성 파일을 받아들이는 간단한 대체 코드를 작성할 수는 없습니다. 운이 좋다면 편리한 스크립팅 언어 인 Perl one-liner에서 바인딩을 사용하는 단일 시스템 호출이 있습니까? – tripleee

+0

이 옵션을 살펴 보겠습니다. 이 도구는 MIT 라이센스처럼 보이므로 상업적으로 친숙합니다. – Chris

답변

3

xattr으로 수행하는 방법을 모르지만 사용할 수있는 오래된 파일 시스템 트릭이 있습니다. 참고 : 이것은 기본적으로 폐기되었지만 10.8.2에서 여전히 작동합니다. 나는 attribfile 16 진수 형식 인 경우에는 약속에 대한 10.8.3 등이 사용 없는지 확인하십시오 attribfile 원시입니다

xxd -r -p attribfile >File/..namedfork/rsrc 

경우, cat 대신 xxd -r -p를 사용합니다. 속성이 리소스 포크가 아닌 다른 것이라면 ... 나는 잘 모른다.

+0

hmmm, 나는 리소스 포크를 그런 식으로 내보내려고했지만 10.7 이상에서는 실패했다. 그렇게 설정하지 않으 셨습니다. 나는 그것을 시도 할 것이다. – Chris

+0

리소스 포크의 문제를 해결하는이 방법이 효과가있는 것 같습니다. 감사! – Chris

+0

중간 임시 파일 없이도 할 수 있습니다. 'xattr -p -x com.apple.ResourceFork src | xxd -p -r -> dst/.. namedfork/rsrc' – dardo82

1

허용 된 대답이 나에게 효과가 없었기 때문에 계속 다른 해결책을 찾았습니다. 다른 사람들이 필요로 할 때를 대비하여 여기에 게시했습니다.

내 문제는 vlc-2.1.4를/Applications 폴더에 복사하는 것이 었습니다. 이 말을 계속 :

The Finder can’t complete the operation because some data in “VLC” can’t be read or written. 
(Error code -36) 

을 그리고 난 내가이 스레드에 표시된 오류가 발생 된 단말기에서 cp을 사용하여 시도합니다.

그래서 콘솔에서 다음 명령을 실행했습니다 (I tar VLC를 요약하고 목적지에서 untar하므로 ...)그것은)는 cp으로 작동합니다

cd /Volumes/vlc-2.1.4/ 
tar cf /Applications/vlc.tar VLC.app 
cd /Applications/ 
tar xf vlc.tar 
rm vlc.tar 

나는이 같은 문제를 가진 다른 사람을 위해 유용하게 사용될 수 있기를 바랍니다.

관련 문제