Mac OS X의 파일에서 "확장 된 속성"을 제거하려면 어떻게합니까?


260

나는 스트레스 테스트를 실행 AppleScript 스크립트가 있습니다. 테스트의 일부는 특정 파일을 열고 저장하고 닫는 것입니다. 어쨌든 파일은 파일이 저장되지 못하게하는 "확장 된 속성"을 선택했습니다. 이로 인해 스트레스 테스트가 실패합니다.

확장 된 속성을 제거하려면 어떻게합니까?


확장 된 속성으로 인해 파일이 저장되는 것을 막을 수 없습니다. 권한 문제 또는 ACL이 아닙니까?
릴리 발라드

방금 10.7.3으로 업그레이드 했습니까? 많은 GUI 응용 프로그램 (TextEdit 포함, 다른 응용 프로그램-내가 작성한 것을 포함하여 이상한 일을하지 않는 응용 프로그램 포함)이 이제 파일에 격리 비트를 설정하는 버그가있는 것 같습니다. @Bavarious가 말했듯이 @ xattr @를 사용하여 제거 할 수 있습니다. 무료로 제공되는 TextWrangler를 살펴보십시오. AppleScript가 잘 지원되고 있다고 생각합니다. 검역소를 설정하지 않는다고 들었습니다.
Abhi Beckert

6
아래가 효과가 있었다면 답을 받아 들여야합니다. –이 웹 사이트를 좋은 지식 기반으로 만드는 데 도움이됩니다 :-)
Graza

답변:


392

xattr명령을 사용하십시오 . 확장 된 속성을 검사 할 수 있습니다.

$ xattr s.7z
com.apple.metadata:kMDItemWhereFroms
com.apple.quarantine

-d옵션을 사용하여 하나의 확장 된 속성을 삭제하십시오.

$ xattr -d com.apple.quarantine s.7z
$ xattr s.7z
com.apple.metadata:kMDItemWhereFroms

-c옵션을 사용하여 모든 확장 된 속성을 제거 할 수도 있습니다 .

$ xattr -c s.7z
$ xattr s.7z

xattr -h명령 행 옵션이 표시되며 xattr에는 맨 페이지가 있습니다.


2
애플은 온라인으로 제공 그것을위한 매뉴얼 페이지가 있습니다 developer.apple.com/documentation/Darwin/Reference/ManPages/...
퀸 테일러

Mountain Lion (10.8)에서 -c 옵션이 제거 된 것으로 보입니다. xattr -h는 더 이상 -c를 표시하지 않으며 사용될 때 "-c 인식되지 않음"을 생성합니다. 확장 속성을 하나씩 제거하는 것은 매우 고통 스럽습니다.
helioz

1
-c나를 위해 작동하지 않습니다 (OS X 10.6.8). -d불평하지는 않았지만 아무런 효과가 없었습니다. 각 확장 속성의 이름을 다음과 같이 명시 적으로 지정해야합니다 xattr -rd <attrname> <folder/file>(재귀 적으로 삭제). 존재하는 속성 (전체 디렉토리 트리에있는 동일한 속성)을 찾으려면 xattr <dir/file>위의 답변과 같이 사용하십시오.
mindthief

여기에 xmind 명령 줄 도구가 필요하다고 언급 한 사람이 없습니다. 10.6.8에서는 다른 것으로 불립니다. 다음 은 GitHub에 사전 구축 된 설치 프로그램에 대한 링크입니다. 따라서 xCode를 모두 설치하지 않아도 문제가 있는지 확인할 수 있습니다.

5
내 10.8.5 시스템에 Xcode를 설치하면 xattr -c나에게 잘 작동하고 모든 메타 데이터가 성공적으로 제거됩니다.
Doktor J

103

단일 파일에서 단일 속성 제거

Bavarious의 답변을 참조하십시오.


단일 파일에서 모든 확장 된 속성을 제거하려면

플래그 xattr와 함께 사용 -c하여 속성을 "지우십시오".

xattr -c yourfile.txt



많은 파일에서 모든 확장 된 속성을 제거하려면

디렉토리의 모든 파일에서 확장 된 속성을 재귀 적으로 제거하려면 -c"clear"플래그를 -r재귀 플래그 와 결합하십시오 .

xattr -rc /path/to/directory



Mac OS X 사용자를위한 팁

공백이나 특수 문자가 포함 된 긴 경로가 있습니까?

를 열고 Terminal.app입력을 시작 xattr -rc하고 후행 공백을 포함시킨 다음 파일 또는 폴더를 Terminal.app창으로 드래그하면 적절한 이스케이프가 포함 된 전체 경로가 자동으로 추가됩니다.


1
-cOS X 10.5에 실패합니다 option -c not recognized. 우리는 Apple의 PowerPC에서 테스트하기 위해 하나를 사용합니다. 그것은 OS X 지원의 하위 버전처럼 보인다 -l, -p, -w-d.
jww


@ jww 아래 답변에서 왜 오류가 발생하는지 설명합니다. stackoverflow.com/a/58616002/1896134
JayRizzo

23

다음을 사용하십시오.

xattr -rd com.apple.quarantine directoryname

이것은 모든 곳에서 성가신 속성을 재귀 적으로 제거합니다.


7

또 다른 재귀 접근법 :

# change directory to target folder:
cd /Volumes/path/to/folder

# find all things of type "f" (file), 
# then pipe "|" each result as an argument (xargs -0) 
# to the "xattr -c" command:
find . -type f -print0 | xargs -0 xattr -c

# Sometimes you may have to use a star * instead of the dot.
# The dot just means "here" (whereever your cd'd to
find * -type f -print0 | xargs -0 xattr -c

-cOS X 10.5에 실패합니다 option -c not recognized. 우리는 Apple의 PowerPC에서 테스트하기 위해 하나를 사용합니다. 그것은 OS X 지원의 하위 버전처럼 보인다 -l, -p, -w-d.
jww

@ jww 아래 답변에서 왜 오류가 발생하는지 설명합니다. stackoverflow.com/a/58616002/1896134
JayRizzo

3

답변 (개별 파일)


1. 선택에 사용할 쇼케이스 키.

xattr ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # com.apple.lastuseddate#PS
    # com.apple.metadata:kMDItemIsScreenCapture
    # com.apple.metadata:kMDItemScreenCaptureGlobalRect
    # com.apple.metadata:kMDItemScreenCaptureType

2. 삭제할 키를 선택하십시오.

xattr -d com.apple.lastuseddate#PS ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
xattr -d kMDItemIsScreenCapture ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png

3. 키를 다시 보여 주어 키가 제거되었는지 확인하십시오.

xattr -l ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # com.apple.metadata:kMDItemScreenCaptureGlobalRect
    # com.apple.metadata:kMDItemScreenCaptureType

4. 마지막으로 특정 파일의 모든 키를 제거하십시오.

xattr -c ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png

응답 (디렉토리의 모든 파일)


1. 선택에 사용할 쇼케이스 키.

xattr -r ~/Desktop

2. 디렉토리에서 모든 파일에 대한 특정 키 제거

xattr -rd com.apple.FinderInfo ~/Desktop

3. 디렉토리의 모든 파일에서 모든 키를 제거하십시오.

xattr -rc ~/Desktop

경고 : 삭제 한 후에는 다시 가져 오지 마십시오!
오류 : 실행 취소가 없습니다.


오류


사람들이 겪고있는 오류를 해결하고 싶었습니다. 오류가 나에게 견과류를 몰 았기 때문에 ... 맥에서 설치하면xattr 파이썬에서 에서 환경에 문제가있을 수 있습니다.

내 Mac에는 두 가지 경로가 있습니다. xattr

type -a xattr

    # xattr is /usr/local/bin/xattr    # PYTHON Installed Version
    # xattr is /usr/bin/xattr          # Mac OSX Installed Version

따라서 -cxargs에서 작동하지 않는 예제 중 하나 에서 bash에서는 기본적으로 비 Python 버전으로 설정되기 때문입니다.

와 일하다 -c

/usr/bin/xattr -c

작동하지 않습니다 -c

/usr/local/bin/xattr -c
    # option -c not recognized

내 쉘 / 터미널의 기본값은 / usr / local / bin / xattr 이며 기본값 $PATH /usr/local/bin:은 이전의 것이기 때문 /usr/bin:입니다.

파이썬을 제거하려고하면 다음을 볼 수 있기 때문에 이것을 증명할 수 있습니다 xattr.

pip3 uninstall xattr
Uninstalling xattr-0.9.6:
  Would remove:
    /usr/local/bin/xattr
    /usr/local/lib/python3.7/site-packages/xattr-0.9.6.dist-info/*
    /usr/local/lib/python3.7/site-packages/xattr/*
Proceed (y/n)?

해결 방법


고치다 option -c not recognized오류

  1. 파이썬 제거 xattr 을 .pip3 uninstall xattr
  2. 모두 닫기 Terminal 창을 닫고 종료Terminal
  3. 새로운 재개 Terminal 창을 .
  4. 재실행 xattr 명령과 지금은 작동합니다.

또는

파이썬을 유지하려면 xattr다음을 사용하십시오.

/usr/bin/xattr

의 모든 Shell명령Terminal


예:


Python 버전은 xattr이미지를 전혀 처리하지 않습니다.

Good-Mac:~ JayRizzo$ xattr ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # Traceback (most recent call last):
    #   File "/usr/local/bin/xattr", line 8, in <module>
    #     sys.exit(main())
    #   File "/usr/local/lib/python3.7/site-packages/xattr/tool.py", line 196, in main
    #     attr_value = attr_value.decode('utf-8')
    # UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 2: invalid start byte

Good-Mac:~ JayRizzo$ /usr/bin/xattr ~/Desktop/screenshot\ 2019-10-23\ at\ 010212.png
    # com.apple.FinderInfo
    # com.apple.lastuseddate#PS
    # com.apple.metadata:kMDItemIsScreenCapture
    # com.apple.metadata:kMDItemScreenCaptureGlobalRect
    # com.apple.metadata:kMDItemScreenCaptureType

맨 페이지

OSX xattr 매뉴얼 페이지

Python xattr 버전 0.6.4 매뉴얼 페이지

참고 : 나는 할 수 없었다 현재 버전 0.9.6에 대한 Python 도움말 페이지를 찾을

읽어 주셔서 감사합니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.